2
回答
C语言栈内内存分配的两问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

1. 标准中是否规定栈内地址是如何分配的, 就是说, 先定义占据更靠栈底的位置, 还是后定义的占据更靠栈底的位置? @中山野鬼 @小倩

2.不管什么架构, 多字节结构(包括内建的int和自定义的struct)对象的地址, 都是该对象的最低地址? @宁采臣 @腌红虾

x86下:

typedef struct

{

    char a[3];

}X;

函数内

{

    X x;

}

栈内:

-------------------

栈底高

|x.a[2]|  

|x.a[1]|

|x.a[0]|=>x

栈顶低

-----------------

TMD, 编译器洗洗睡吧, 你太累了.

第二个问题应该是这样的, 第一个不太确定. @中山野鬼 @山中野鬼

举报
周翼翼
发帖于6年前 2回/572阅
共有2个答案 最后回答: 6年前

标准就连栈和堆的增长方向都没有规定,各个OS都不一样,跟OS具体实现有关,定义占据的位置,恐怕C99也爱莫能助吧

结构体内的位置占据,目前看来是酱紫的,这样的代码,至少在Linux/Win 32下还是可以的,只是内存对齐比较烦人,C++的话如果使用了虚函数,G++似乎会默认把v_ptr放在最前面

应该没有。同时楼上说是对的,堆栈的增长方向,和机器指令有关。push pop的指令调整SP每个机器是固定的。C如果约束了堆栈的增长方向,就不是高级语言了。

关于你说的数据在栈中的分配顺序,我人在外面手上没标准(奶奶的,你的问题,几乎每次都要用重新ctrl +r 一遍标准,属于用刀架着我跟你学习,我又不是太监,哈)。

但有一点,编译器的优化,可能会改变堆栈内分配变量的前后顺序。所以想这个也不是标准所规定的。

--- 共有 1 条评论 ---
周翼翼栈增长方向我当然知道是CPU的事~~ 6年前 回复
顶部