Krasin
|
|
|
|
|
Рег.: 23.06.2004
|
Сообщений: 7039
|
Из: Калифорния
|
Рейтинг: 3386
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Ighn]
03.01.2007 18:53
|
|
|
Посмотри в настройках проекта. Гарантий дать не могу (дело было давно, а дельфи сейчас не стоит, проверить не могу), но вроде бы там было где-то место, где можно указать стандартное выравнивание массивов в памяти.
|
|
Ighn
|
Helix pomatia
|
|
|
|
Рег.: 15.06.2005
|
Сообщений: 383
|
Из: Москва
|
Рейтинг: -10
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Krasin]
03.01.2007 19:03
|
|
|
Есть Project->Options->Compiler->Record field alignment. Там есть следующие значения: 1,2,4,8. 16 нету. Есть еще директива компилятора {$A+}. Из описания не видно, чтобы она помогала выравнивать по 16 байт.
|
Incertus animus dimidium sapientiae est - Сомнение - половина мудрости |
|
Krasin
|
|
|
|
|
Рег.: 23.06.2004
|
Сообщений: 7039
|
Из: Калифорния
|
Рейтинг: 3386
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Ighn]
03.01.2007 19:04
|
|
|
Тут уже помочь не смогу, последний раз с Дельфи работал больше трех лет назад.
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Ighn]
03.01.2007 19:06
|
|
|
выделяй память в heap-е и выравнивай сам.
|
|
Basilio
|
GreenOne
|
|
|
|
Рег.: 14.10.2002
|
Сообщений: 13749
|
Из: Москва
|
Рейтинг: 3476
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Ighn]
06.01.2007 00:21
|
|
|
{$ALIGN 16} не работает? в доках правда разрешено только 1,2,4,8 я не разбираюсь в SSE/2 и т.п.. нафига использовать сингл для арифметики? SSE использует 4-байтовый float?
|
|
Ighn
|
Helix pomatia
|
|
|
|
Рег.: 15.06.2005
|
Сообщений: 383
|
Из: Москва
|
Рейтинг: -10
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Basilio]
06.01.2007 07:04
|
|
|
В ответ на:
{$ALIGN 16}
Не работает. [quote]SSE использует 4-байтовый float?[quote] Да. Преимущество в параллельности обработки данных. SSE позволяет производить одновременно операции над 4-мя парами чисел. Реальная польза: http://forum.b.gz.ru/showflat.php?Cat=&Board=prog&Nu...
|
Incertus animus dimidium sapientiae est - Сомнение - половина мудрости |
|
Ighn
|
Helix pomatia
|
|
|
|
Рег.: 15.06.2005
|
Сообщений: 383
|
Из: Москва
|
Рейтинг: -10
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: DarkGray]
06.01.2007 07:06
|
|
|
В ответ на:
выделяй память в heap-е и выравнивай сам.
Может примерчик, работающий в Delphi, подкинешь? Самый простой. Буду очень признателен.
|
Incertus animus dimidium sapientiae est - Сомнение - половина мудрости |
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Ighn]
06.01.2007 07:58
|
|
|
выделяем выравненные куски + прячем от остального кода работу по выравниванию (решение в лоб)
code:
byte* AllocAlign16(int size)
{
byte * p = new byte[size + 17];
byte *p16 = p + 16 - ((int)p)%16; //выравниваем
(p16-1)^ = p16-p; //запоминаем сдвиг, чтобы потом можно было восстановить истинный указатель на блок
return p16;
}
void FreeAlign16(byte *p)
{
byte * oldP = p - (p-1)^;
delete oldP;
}
|
|
Ighn
|
Helix pomatia
|
|
|
|
Рег.: 15.06.2005
|
Сообщений: 383
|
Из: Москва
|
Рейтинг: -10
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: DarkGray]
06.01.2007 08:55
|
|
|
В ответ на:
...примерчик, работающий в Delphi
|
Incertus animus dimidium sapientiae est - Сомнение - половина мудрости |
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: Ighn]
06.01.2007 14:57
|
|
|
что не получается, когда пытаешься сделать этот пример компилируемым?
ps вместо % должна быть функция Mod и выделение освобождение byte-ого массива может чуть по другому записывается.
|
|
Ighn
|
Helix pomatia
|
|
|
|
Рег.: 15.06.2005
|
Сообщений: 383
|
Из: Москва
|
Рейтинг: -10
|
|
Re: Как узнать вышел ли указатель за пределы массива
[re: DarkGray]
07.01.2007 02:01
|
|
|
Спасибо, попробую.
|
Incertus animus dimidium sapientiae est - Сомнение - половина мудрости |
|