【发布时间】:2020-03-24 15:57:42
【问题描述】:
我写了一个简单的例子:
#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;
}
运行示例,我得到以下结果:
字节1:0x1f53e70
字节2:0x1f53e90
字节3:0x1f53eb0
每次我分配一个字节的内存时,它总是对齐 16 个字节。为什么会这样?
我在 GCC 5.4.0 和 GCC 7.4.0 上测试了这段代码,得到了相同的结果。
【问题讨论】:
-
@MosheRabaev 据我所知,
alignas用于特定的变量或类型。如何为每个对象设置默认的alignas? -
@MosheRabaev 如果有默认对齐方式,它是否也适用于堆栈上的对象?
-
没有全局的
alignas,不知道@MosheRabaev 想用评论说什么。 -
我不知道为什么默认它对齐到 16 个字节。我措辞错误,我的意思是使用 alignas 进行自定义行为。
标签: c++ dynamic-memory-allocation memory-alignment