gpt4 book ai didi

c - 如何8字节对齐静态数组中的每个字符串?

转载 作者:太空狗 更新时间:2023-10-29 15:23:07 35 4
gpt4 key购买 nike

假设您在 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];

使得读取不会跨越生成的 asm 代码中的两个四字,即字符串的前 8 个字节使用对齐读取进入寄存器。

最佳答案

假设您的意思是希望字符串文字对齐;这是不可能的。但是您可以通过制作具有自定义对齐方式的数组来获得类似的效果,例如:

_Alignas(8) static char const s1[] = {"a"};
_Alignas(8) static char const s2[] = {"longer string"};
_Alignas(8) static char const s3[] = {"bcd"};
_Alignas(8) static char const s4[] = {"wow a really long string"};
_Alignas(8) static char const s5[] = {"foo"};

char const *const strings[] = { s1, s2, s3, s4, s5 };

您可以通过为每个条目使用预处理器宏来节省输入。

另见 this question .


根据 C17 标准,您还可以使用带对齐说明符的复合文字:

char const *const strings[] = 
{
(_Alignas(8) char const[]){"a"},
(_Alignas(8) char const[]){"longer string"},
};

虽然有些编译器还不支持这个。

关于c - 如何8字节对齐静态数组中的每个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56437779/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com