相关疑难解决方法(0)

为什么C++不能使结构更紧凑?

例如,我有一个class,

class naive {
public:
    char a;
    long long b;
    char c;
    int d;
};

根据我的测试程序,a对d被陆续建成,像

a-------
bbbbbbbb
c---dddd

- 意味着未使用

为什么C++不能让它变得更紧,比如

ac--dddd
bbbbbbbb

c++ packing

28
推荐指数
1
解决办法
1867
查看次数

双重对齐

根据这篇文章的讨论,我理解结构成员对齐的主要原因是性能(以及一些架构限制).

如果我们将在编译32位x86时调查Microsoft(Visual C++),Borland/CodeGear(C++ - Builder),Digital Mars(DMC)和GNU(GCC):对齐为int4个字节,如果int未对齐,则可能会发生2行存储体读取.

我的问题是为什么不double将4字节对齐呢?4个字节对齐double也会导致2行内存库读取....

例如,在以下示例中,由于double是8对齐的,因此结构的实际大小将是sizeof(char) + (alignment for double padding) + sizeof(int) = 20 bytes.

typedef struct structc_tag{
    char        c;
    double      d;
    int         s;
} structc_t;
Run Code Online (Sandbox Code Playgroud)

谢谢

c c++ structure memory-alignment

8
推荐指数
3
解决办法
7487
查看次数

标签 统计

c++ ×2

c ×1

memory-alignment ×1

packing ×1

structure ×1