正在阅读:《编程高手箴言》读后(4)《编程高手箴言》读后(4)

2004-04-08 14:39 出处:CSDN 作者:seacloud 责任编辑:sdq

  程序二:
  #include <stdio.h>
  long array[10 *1024 * 1024] = { 0xcccccccc };
  int main()
  {
      printf("Hello World!\n");
  }

   所以,从这里看出为什么要了解平台。任何的程序编译出来都和平台有关。如果脱离平台,任何语言都没有什么意义了。
=========================================
  呵呵,当年SUN推Java的口号就是其平台独立性了。虽说这一点Sun也不是完美的,但是很多小程序跨平台完全没有问题。

  局部变量完全在堆栈里面去实现。
=========================================
  什么意思呢?我们可以看看一小段VC程序反汇编的结果
  push        ebp
  mov         ebp,esp
  sub         esp,44h
  ... ...
  pop         ebp
  这段代码的sub esp, 44h就是在栈里给局部变量预留空间了,以后的push/pop操作只会从减去44h的esp处开始了。而在ebp和esp-44h之间的这段空间就是局部变量的空间了。
  《箴言》里提到函数不能把自己的局部变量传递给上层函数,明白了上面的原理我们就很清楚了:返回到上层函数后,堆栈指针也就相应上去了,谁也不知道栈里是些什么值了。
  其实,把函数局部变量传递给上层函数会导致很隐秘的bug,因为在有的程序流程里,栈里面的值没有被破坏,那么程序“好像”还可以工作,而如果在另外的流程里栈值被破坏了,那么程序立即就不对了。所以对这种问题一定要当心。

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品