如何解决在线性分配器中对齐结构
我正在为这个类在 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
大小对齐吗?
解决方法
-
many other simple linear allocators align the memory in the allocate function. Why do they do this?
如果需要以不同方式对齐,例如 16 或 32 字节(与 AVX 一起使用),他们会这样做。 -
if you do align the newly allocated memory,would you align the memory when you allocate it? Or would you align it when you return the memory block?
您不能重新对齐已分配的内存。 -
Also,would you align it to the sizeof(Test),or the platform's WORD size?
取决于你为什么要对齐。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。