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

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 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; } 

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

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

应该是一个很好的阅读。

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

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

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

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