程序中变量分配区域问题

大川搬砖 2013-11-23 02:57:32


我用vs2010来调试一个函数
请注意图中红色的部分

ebp的值是0x0012ff68,栈的基地址

我在函数中定义了一个指针变量 list_head1,它被分配在了0x12ff60的地址处。


这个变量的空间地址是如何确定的,还有就是第二个变量list_head2的地址为0x12ff54,和list_head1之间相差8个字节,这个是平台的特性还是其他情况

...全文
251 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bedynamic 2013-11-25
  • 打赏
  • 举报
回复
引用 1 楼 jerry_dqh 的回复:
都是在栈上分配,每个变量的的地址必须能被4或者8整除。这个相差8个,填充CC,主要是因为用于检测栈破坏等情况,属于编译器的自己行为。如果是release版本,应该就不会有了。没有vs2010,你可以编译成Release版本打印一下看看。
+1
赵4老师 2013-11-25
  • 打赏
  • 举报
回复
参考gcc相关源代码。
xiaohuh421 2013-11-25
  • 打赏
  • 举报
回复
如果数据结构课中的栈, 你听了课了, 就知道. 栈空间申请, 无非就是移动下栈指针, 向某个方向移动是分配空间, 往反方向移动则是释放空间.
「已注销」 2013-11-25
  • 打赏
  • 举报
回复
想问什么?你用gcc再编译对比下
大川搬砖 2013-11-25
  • 打赏
  • 举报
回复
我在release模式下调试,vs把对栈的初始化也给省了,而且两个相邻变量之间的地址也是挨着的,

toofunny 2013-11-23
  • 打赏
  • 举报
回复
是平台的问题。在VC6下变量是相邻的,VS为了预防栈溢出攻击做了一些变动。 调用函数,基本就是 push 各个参数 call xxx函数 然后xxx函数内: push ebp mov ebp,esp sub esp, 局部变量占用的字节 局部变量的地址就是ebp到esp之间的那段地址
碼上道 2013-11-23
  • 打赏
  • 举报
回复
都是在栈上分配,每个变量的的地址必须能被4或者8整除。这个相差8个,填充CC,主要是因为用于检测栈破坏等情况,属于编译器的自己行为。如果是release版本,应该就不会有了。没有vs2010,你可以编译成Release版本打印一下看看。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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