LINUX.ORG.RU

Странный доступ к массиву

 ,


0

2
// my_module.cl
void draw(__global uint8 * image)
{
    int i = 0;
    for (i = 0; i < 4; i++)
    {
        printf("image (%d) <= %p\n", i, &image[i]);
        image[i] = 0;		
    }
    // ...
}

получаю такие адреса:

image (0) <= 0x959d380 
image (1) <= 0x959d3a0 
image (2) <= 0x959d3c0 
image (3) <= 0x959d3e0 

Почему разница между двумя элемента массива = 32 байта?


разница между двумя элемента массива = 32 байта

Возможно, выравнивание по границам 32-разрядных слов.

Xenesz ★★★★
()
Ответ на: комментарий от AoD314

По идее тебе должно быть по фигу, как именно элементы размещены. На крайняк есть арифметика на указателях. Даже если не собираешься делать код переносимым, закладываться на поведение компилятора на таком низком уровне есть плохая практика, ПМСМ. Мне кажется, лучше использовать что-то другое вместо массива целых, если у тебя на самом деле непрерывная последовательность данных, а не вектор. Возможно, строки.

Xenesz ★★★★
()
Ответ на: комментарий от kim-roader

Спасибо, немного был не прав ... думал что uint8 - это 8-битное unsigned int.

AoD314
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.