我写了一个简单的例子:
#include <iostream>
int main() {
void* byte1 = ::operator new(1);
void* byte2 = ::operator new(1);
void* byte3 = malloc(1);
std::cout << "byte1: " << byte1 << std::endl;
std::cout << "byte2: " << byte2 << std::endl;
std::cout << "byte3: " << byte3 << std::endl;
return 0;
}
运行代码后,我得到了以下结果:
byte1: 0x1f53e70
byte2: 0x1f53e90
byte3: 0x1f53eb0
每次我分配一个单字节的内存时,它总是以16字节对齐。这是为什么呢?
我在GCC 5.4.0和GCC 7.4.0上测试了这段代码,并得到了相同的结果。
alignas
是针对特定变量或类型使用的。我如何将默认的alignas
设置为每个对象? - jingealignas
,我不知道@MosheRabaev在评论中想表达什么意思。 - walnut