【发布时间】:2021-07-11 23:13:52
【问题描述】:
我正在 x64 上为此类构建一个非常简单的线性分配器:
class Test {
size_t first[64]; // 512 bytes
void* second[64]; // 512 bytes
unsigned char third; // 1 byte
};
Test 的总大小应该是 1025 字节,但它的实际大小是 1032 字节,这是预期的。编译器已经自动对齐了结构,很好。
现在这里是我的线性分配器的准系统:
class Allocator {
private:
Test* memory;
public:
Allocator(const size_t size) {
memory = static_cast<Test*>(malloc(sizeof(Test) * size));
}
Test* allocate() {
return memory++;
}
};
而且效果很好!
但是,我看到许多其他简单的线性分配器在 allocate 函数中对齐内存。他们为什么这样做呢? Test 结构本身已经对齐。
另外,如果你决定使用某种对齐方式,你会在分配内存时对齐内存吗?或者你会在allocate 函数中返回一个对齐的指针吗?
另外,您会将其与sizeof(Test) 或平台的WORD 大小对齐吗?
【问题讨论】: