Я часто вижу код, например, следующий, когда, например, представляет большую растровую карту в памяти:
size_t width = 1280;
size_t height = 800;
size_t bytesPerPixel = 3;
size_t bytewidth = ((width * bytesPerPixel) + 3) & ~3; /* Aligned to 4 bytes */
uint8_t *pixelData = malloc(bytewidth * height);
(то есть растровое изображение, выделенное как непрерывный блок памяти, имеющий bytewidth
, выровненный с определенным количеством байтов, чаще всего 4.)
Затем на изображении указывается точка:
pixelData + (bytewidth * y) + (bytesPerPixel * x)
Это приводит меня к двум вопросам:
- Соответствует ли выравнивание такого буфера влиянию производительности на современные процессоры? Должен ли я вообще беспокоиться о выравнивании, или компилятор справится с этим?
- Если это имеет какое-то влияние, может ли кто-нибудь указать мне на ресурс, чтобы найти идеальное выравнивание байтов для разных процессоров?
Спасибо.