根据我的理解,64位linux系统的指针大小为8字节,对齐要求应为8字节对齐。如果是这种情况那么为什么新的操作符返回16个字节(可能是32,但是这个数字是否高于8),对齐指针?简单的调用,如
struct alignas(8) SimpleChar
{
char c;
}
SimpleChar * c = new SimpleChar;
SimpleChar * c1 = new SimpleChar;
将分配32个字节,每个指针对齐16个字节。如果相反,我使用了新的
SimpleChar * c = new (slab) SimpleChar;
SimpleChar * c1 = new (slab + 8) SimpleChar;
这将导致两个指针类型使用16个字节。 我的问题如下 -
干杯, RG
编辑:我没有直接使用char,而是指定了一个控制对齐的结构。
答案 0 :(得分:0)
在获得完美包装(分配时没有浪费的空间),重新使用大块的容易程度(减少因孔造成的浪费),速度和代码简单性之间存在紧张关系。
仅分配16字节对齐的块是16字节大的整数倍可能会浪费一点内存,但会大大简化。