• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






Sniweef

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

2012年12月28日

C程序的存储空间布局(二)
摘要: 在我上一篇随笔中,我讨论了一个由于数组越界导致程序陷入死循环的情况及其原因。不过,其中还是有些疑问:如果变量跟数组处于同一数据段时(或是栈,或是非初始化数据段等等),它们在内存中是怎样安排的?于是,我重新又小实验了一下。对于代码:void foo(){ int a[4]; int i; for (i = 0; i <= 4; i++) { a[i] = 0; } }使用gcc -c生成目标文件后利用objdump -d反汇编一下,生成如下: 0: push %rbp 1: mov %rsp,%rbp 4: mo... 阅读全文
posted @ 2012-12-28 14:42 Sniweef 阅读(548) 评论(1) 推荐(0)
 

2012年12月27日

C程序的存储空间布局(一)
摘要: 前两天在朋友的QQ空间上看到一个函数,如下:void foo(){ int a[4]; int i; for (i = 0; i <= 4; i++) { a[i] = 0; } }朋友说这个函数里会陷入死循环。我看了下,除了数组越界问题,其它没看出有什么问题。后来果断敲代码用GCC编译运行一下,发现并不像他说得那样。于是我找他讨论,他说没道理啊,在他那确实陷入死循环了。我想这应该是跟编译环境有关,可是,在什么情况下它会陷入死循环呢?我很疑惑,在听到朋友说到程序是用堆栈存放数据的,我突然想起APUE上面讲过的程序存储空间布局。于是,立马翻到那一... 阅读全文
posted @ 2012-12-27 20:59 Sniweef 阅读(1088) 评论(3) 推荐(3)