我目前正在用C++ 11开发OS内核,遇到一个问题,我似乎找不到自己的答案。
目前,我正在使用编译器特有的属性(例如gcc的__attribute__(aligned)
)来对齐我的分页结构,但是我想使用C++ 11 alignas说明符来代替,在Clang++上这没有问题,因为它很乐意接受4096对齐作为alignas的参数,但是G++不会!
因此,首先,alignas specifier
和gcc __attribute__(aligned)
之间的主要区别是什么,显然两者都确保对齐到特定值,但是gcc中的alignas说明符似乎有128个限制,而该属性似乎几乎是无限的,为什么呢?这?
另外,为什么不能将const整数传递给alignas说明符?
最佳答案
从GCC支持状态看来,gcc 4.7不完全支持对齐支持,但gcc 4.8支持。 4.8。release page还将alignas
列为新支持的功能。
另外,从alignment support proposal(3.11):
并且来自同一文档(7.1.6):
那也可能是答案的一部分。我目前无法使用全部标准,因此应该可以确认这一点。
至于__attribute__(aligned)
和alignas
之间的区别,我认为它们在语义上没有区别,但是一个只是编译器扩展,而另一个则完全由标准定义。
为了回答您的最后一个问题,alignas
仅用于:
alignas ( constant-expression )
alignas ( type-id )
关于c++ - alignas说明符vs __attribute __(aligned),c++ 11,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15523537/