你能像在C#中一样明确设置C++中的结构布局/对齐方式吗?

5
在C#中,你可以使用类似这样的对齐属性:
[StructLayout(LayoutKind.Explicit)]
public struct Message
{
    [FieldOffset(0)]
    public int a;
    [FieldOffset(4)]
    public short b;
    [FieldOffset(6)]
    public int c;
    [FieldOffset(22)] //Leave some empty space just for the heck of it.
    public DateTime dt;

}

在标准C++中是否有类似的东西,可以让您对内存中的结构布局进行精细控制?


你为什么认为你需要这种“精细控制”? - anon
1
没有什么特别的原因,我只是在探索C++。 - Gary Willoughby
4个回答

5

链接已失效 :( - Danny

4

但是你可以通过自己插入填充来轻松实现那种布局:

#pragma pack(push, 1)
public struct Message
{
    int a;
    short b;
    int c;
    char padding1[12];
    long long dt;
}
#pragma pack(pop)

1

0

我对C#的对齐属性不太熟悉,所以不能确定,但这看起来很像C++(和C)的"位域"。


不同的是:位域中字段的顺序是实现特定的,不受规范强制要求。 - Omer Mor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接