alignas说明符vs __attribute __(aligned),c 11
我目前正在C 11中开发一个操作系统内核,我遇到一个问题,似乎找不到自己的答案.
目前我正在调整我的分页结构,使用编译器特定的属性(例如,gcc的__attribute __(对齐)),但是我想使用C 11 alignas说明符,而不是Clang这是没有问题的,因为它很乐意接受4096对齐作为对齐的参数,但是G不是! 所以首先,alignas说明符和gcc __attribute __(对齐)之间的主要区别是显然都能保证与特定值的对齐,但是gcc中的alignas说明符似乎有128的限制,而属性似乎几乎是无限,为什么是这样? 为什么不能将一个const整数传递给alignas说明符? 解决方法
从GCC支持状态来看,gcc 4.7中并没有完全支持对齐支持,但是它是
gcc 4.8. alignas也被列为4.8
release page中新支持的功能.
另外,从alignment support proposal(3.11):
同样的文件(7.1.6):
这可能也是答案的一部分.我目前无法访问完整的标准,有人应该可以确认. 对于__attribute __(aligned)和alignas之间的区别,我不认为它们在语义上是不同的,但是一个只是一个编译器扩展,另一个是由标准完全定义的. 为了回答你的最后一个问题,alignas只定义为: alignas ( constant-expression ) alignas ( type-id ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |