【问题标题】:Simple struct alignment/padding question简单的结构对齐/填充问题
【发布时间】:2011-10-19 13:42:40
【问题描述】:

我这里有一个 32 位 C++ 程序,出于好奇正在检查反汇编。我有以下结构:

struct Blah
{
    char foo;
    std::string bar;
};

在访问 blah->bar 时,我注意到以下几点:

; ... address of blah is in eax
003A227B  add         eax,4  

所以我的问题是,为什么需要将 4 添加到 blah 的地址才能到达 bar?我会理解 3,因为 char 是 1 个字节,这将是一个不错的第 4 轮...

【问题讨论】:

  • 并将其添加到结构的开头,而不是 foo 的末尾,这就是为什么它是 4 而不是 3。
  • 啊,呃。将其发布为答案,我会接受。

标签: c++ memory


【解决方案1】:

它是在blah 的基地址上加4。我想这与将 3 添加到刚刚之后 foo 的地址相同。 :)

确实是对齐问题。指针应与 4 的倍数的地址对齐。

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 2020-07-26
    • 1970-01-01
    • 2017-06-08
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    相关资源
    最近更新 更多