Неприятно признаться, но я никогда сильно не думал о такой вещи как alignment. В этой статье будем разбираться с основами вместе с читателями! Итак, для начала стоит понять вообще что такое alignment. Несмотря на то, что в большинстве случаев в процессорах x86/amd64 доступ к памяти разрешен с точностью до конкретного байта, процессоры оптимизированы читать данные, начинающиеся с адресов, кратных машинному слову. Я написал простой бенчмарк. И вот его результаты: Видно, что есть падение производительности на несколько процентов. В особо экстремальных случаях, можно получить ситуации, когда данные будут располагаться в разных кэш-линиях или даже разных страницах памяти, и это будет иметь ещё более тяжелые последствия для производительности. Поэтому компилятор старается учесть эти нюансы. Давайте посмотрим на то, что он может для этого делать. Одним из инструментов, появившихся в C++11 стал оператор alignof. Он показывает, на какое число должен нацело делиться адрес, чтобы объект можно был