Или это было по крайней мере, по его утверждению.
Реальное повышение производительности, утверждает он, достигается за счет использования вашего мозга и обеспечения того, чтобы ваша структура была правильно спроектирована, чтобы использовать преимущества увеличения скорости, одновременно предотвращая компилятор раздувается. Он предоставляет следующий фрагмент кода:
Код: Выделить всё
#pragma pack( push, 1 )
struct SlowStruct
{
char c;
__int64 a;
int b;
char d;
};
struct FastStruct
{
__int64 a;
int b;
char c;
char d;
char unused[ 2 ]; // fill to 8-byte boundary for array use
};
#pragma pack( pop )
Код: Выделить всё
222ms[img]https:/ /i.sstatic.net/Gf6yK.png[/img]
Результаты в одно и то же время и размера (с учетом неиспользуемого символа[ 2 ]< /код>)!
Теперь, если пакет #pragma( push, 1 ) изолировать только от FastStruct (или полностью удалить), мы увидим разницу:

Итак наконец, здесь возникает вопрос: делают ли современные компиляторы (В частности, VS2010) уже оптимизировано для выравнивания битов, отсюда и отсутствие увеличения производительности (но увеличение размера структуры как побочный эффект, как заявил Майк Макшаффри)? Или мой тест недостаточно интенсивен/недостоверен, чтобы дать какие-либо значимые результаты?
Для тестов я выполнял различные задачи, начиная от математических операций и заканчивая многомерным массивом по столбцам. перемещение/проверка, матричные операции и т. д. с невыровненным элементом __int64. Ничто из этого не дало разных результатов ни для одной из структур.
В конце концов, даже если производительность не увеличилась, это все равно полезный момент, о котором следует помнить для сохранения памяти. использование сведено к минимуму. Но мне бы очень хотелось, если бы был прирост производительности (пусть даже незначительный), которого я просто не вижу.
Подробнее здесь: https://stackoverflow.com/questions/908 ... nce-boosts
Мобильная версия