关于变量进入栈区的顺序问题

dgyig 2017-12-27 05:18:41
我发现debug版是从高地址往低地址, 而 release版则并非如此, 请问难道进栈顺序跟代码的顺序不一样吗?

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int b=2;
int *p=&b;
int **q=&p;
int a[5]={5,10,15,20,23};

cout<<"p: "<<p<<endl;
cout<<"*q: "<<q<<endl;
cout<<"a: "<<a<<endl;
return 0;
}

debug版:


release:


...全文
240 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-12-28
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!
  • 打赏
  • 举报
回复
如果想知道具体的情况,VS调试运行的时候,按下ALT+8,看汇编代码吧。
AlbertS 2017-12-27
  • 打赏
  • 举报
回复
这个没有具体的规则,只是不同类型的变量会从不同区去申请空间,比如静态变量、全局变量、常量等等
paschen 版主 2017-12-27
  • 打赏
  • 举报
回复
标准没有规定,编译器可以任意实现,通常RELEASE下会进行尽可能的优化,此外变量存储位置与进栈顺序也没有任何关系
xskxzr 2017-12-27
  • 打赏
  • 举报
回复
反正标准没有规定,编译器怎么干都行。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧