gpt4 book ai didi

c++ - C++ 类的内存布局是否会受到地址空间布局随机化的影响

转载 作者:行者123 更新时间:2023-11-30 02:55:28 24 4
gpt4 key购买 nike

考虑以下 C++ 类:

class MyClass
{
TypeA a;
TypeB b;
TypeC c;
};

我使用的编译器创建此类的表示形式时,成员在内存中的顺序与我在类定义中使用的顺序相同。我最近遇到一个程序,其中利用这个事实来初始化成员。我知道这是一个非常糟糕的主意,因为布局取决于编译器,但我没有编写代码,但到目前为止它可以正常工作。

我想知道现代操作系统中的 ASLR 特性是否会把它搞砸。如果对象在 heap 上动态实例化,我很确定情况并非如此。但是其他情况呢?

最佳答案

不...内存布局中的顺序由标准保证,尽管成员之间也可以有填充(总是包含在 sizeof 结果中,但这确实意味着像你这样的 hacky 代码所描述的可能想要使用显式 pragma 来打包数据成员或使用 offsetof 来计算要操作的偏移量范围,否则它们可能会在布局不同的其他一些编译器/编译器设置上中断。

另外,对象的布局是相同的,无论这些对象是在何处创建的:全局变量、堆栈、堆 - 它总是相同的。考虑 - offsetof 是一个编译时间常量。

关于c++ - C++ 类的内存布局是否会受到地址空间布局随机化的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16455225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com