Представьте, что у вас есть статический массив литеральных строк в программе на C (не на C ++), длина которых может варьироваться в широких пределах. Все, что вас волнует, это то, что каждый начинается с 8-байтовой границы. Есть ли способ убедиться, что GCC или CLANG выровняют каждую строку таким образом?
Вы также хотите сэкономить место, поэтому заполнение строк, чтобы они все были одинакового размера, не вариант.
static char* const strings[] = {
"a", "longer string", "bcd", "wow a really long string", "foo", ...
};
Цель здесь - сделать что-то вроде этого:
uint64_t value = *(uint64_t*) strings[i];
таким образом, что чтение не охватывает два четырехсловых слова в сгенерированном асм-коде, т. Е. Первые 8 байтов строки поступают в регистр с использованием выровненного чтения.