【发布时间】:2011-08-29 23:01:49
【问题描述】:
通常数据根据其大小以两个地址的幂对齐。
我应该如何对齐大小为 20 字节或其他非二次方大小的结构或类?
我正在创建一个自定义堆栈分配器,所以我猜编译器不会为我对齐数据,因为我正在使用连续的内存块。
更多上下文:
我有一个使用 malloc() 分配大量数据的分配器类。 然后我使用 void* allocate(U32 size_of_object) 方法返回我可以存储是否需要存储对象的指针。 这样,所有对象都存储在同一内存区域中,并且有望适合缓存,从而减少缓存未命中。
【问题讨论】:
-
"通常数据根据其大小以两个地址的幂对齐。" - 你从哪里得到那个的??在你通常的地址空间中没有那么多的 2 的幂,可能是 20-50...我当然希望我们可以分配更多的对象!
-
无论如何,您通常不需要担心对齐问题。
-
你到底想做什么?您的编译器会自动处理许多对齐注意事项。您是否尝试使用
SSE指令或具有对齐约束的东西? -
从什么时候开始,物体的大小是 2 的幂?对于我在这里值得信赖的长替身来说,这甚至都不是真的……而且,这根本不是你在问题中所说的。 “多重”和“权力”这两个词的含义不同。
-
@Tiago Costa:“二的幂”??你确定他们没有说“二的倍数”,因为这些东西非常不同......
标签: c++ memory-management