【发布时间】:2018-08-15 10:18:44
【问题描述】:
我对以下代码行有疑问:
char buffer[256] __attribute__((aligned(4096)));
全局数组“缓冲区”的内容是字符串,我从标准输入中获得。 我已经阅读了https://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Type-Attributes.html(gcc/gnu 在线文档)。我知道这个属性以字节为单位指定了变量的最小对齐方式。
我的问题是关于为什么我需要对 char 数组进行这种对齐的原因?
仅仅因为性能原因?
【问题讨论】:
-
确实有点奇怪。我的猜测是他们希望它分配在 4kib 的某个内存段中。
-
不幸的是,变量定义本身并不能告诉我们太多。您需要调查
buffer的用法以尝试获取更多信息。 -
可能是与页面大小对齐?
-
请记住,分配为
char *的内容与它的使用方式无关。在您知道这一点之前,对齐几乎可以用于任何事情。例如,numpy 使用char *来保存数组数据,无论是原始数据还是指针。
标签: c gcc char memory-alignment