'_attribute _((aligned(4)))的含义是什么?在第一行?

时间:2011-08-14 06:54:01

标签: c linux

char buf[BUF_LEN]_attribute_((aligned(4)));
ssize_t len, i = 0;
/* read BUF_LEN bytes' worth of events */
len = read (fd, buf, BUF_LEN);
/* loop over every read event until none remain */
while (i < len) {
struct inotify_event *event =
(struct inotify_event *) &buf[i];
Monitoring File Events | 239
printf ("wd=%d mask=%d cookie=%d len=%d dir=%s\n",
event->wd, event->mask,
event->cookie, event->len,
(event->mask & IN_ISDIR) ? "yes" : "no");
/* if there is a name, print it */
if (event->len)
printf ("name=%s\n", event->name);
/* update the index to the start of the next event */
i += sizeof (struct inotify_event) + event->len;
}

3 个答案:

答案 0 :(得分:2)

char buf[BUF_LEN]_attribute_((aligned(4)));

它指定变量buf的最小对齐,以字节为单位 它使编译器在4字节边界上分配变量buf

This 应该是一个很好的阅读。

答案 1 :(得分:1)

这使得在4字节边界上分配给buf的内存对齐。这可以加速CPU和主存储器之间的内存传输等。

答案 2 :(得分:1)

该指令告诉编译器将缓冲区放在一个四个字节的倍数的地址上。

在某些处理器上,这没有任何影响,如果你不是一次只读取一个字节而是读取2,4或8(16,32和64位),那么在其他处理器上它会加速内存访问。某些处理器甚至需要进行2,4或8字节访问(否则会发生总线错误)。

在这种情况下,这确实是相关的,因为缓冲区稍后作为一系列inotify_event结构进行访问,其中包含作为16位,32位或64位值访问的成员。