IAE*_*IAE 2 c++ struct pointers
所以我正在教我的朋友指点.在这样做时,我注意到两个相同结构的地址完全背靠背.
struct Foo
{
    int a;
};
struct Bar
{
    int b;
};
这让我这样做:
Foo foo; foo.a = 100;
Bar bar; bar.b = 100;
Foo *pFoo = &foo;
Bar *pBar = &bar;
(pFoo+1)->a = 200;
这将覆盖bar.b中的值并将其设置为200.
现在,我并没有质疑做这样的事情的优点 - 它可能永远不会在真正的节目中看到光明.我只是想知道,操作系统是否总是背靠背地分配相同的结构?只要给定区域有足够的可用内存空间.
不,不一定.某些体系结构/编译器可能会在边界上对齐结构,使得数组中的结构与调用堆栈上的结构之间存在不同的间距.你在调用堆栈上分配并将它们视为一个连续的数组,这是一个不可靠的假设.
操作系统不会为本地变量分配堆栈空间,编译器会这样做.C++编译器不保证分配顺序.