我目前正在用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/

10-09 03:00