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

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

  自动的意思就是自动的分配和清除,并且初始的值也是随机的。
=========================================
  在VC Debug版本里,栈中分配的值都会先用0xCCCCCCCC来处理一下,所以大家在Debug模式下调试程序发现在引用0xCCCCCCCC这样的值,就说明在试图使用一个没有初始化的值。这就是在Debug模式下调试的好处之一,如果在Release模式下,系统就不会用0xCCCCCCCC来处理一下了。至于为什么选择0xCCCCCCCC大概是因为 端点中断int 3 对应的机器码就是0xCC吧,我也不是很有把握。

  用固定的地址是可以访问指针所指向的数据的。但是在一般情况下,Windows可能会报非法操作。
=========================================
  在Windows程序里直接给一个指针赋予一个常量的情况及其稀少。尤其在windows里访问物理存贮器和I/O口也不能象在DOS里那样直接进行了。网上有一个WinIO的库(http://www.internals.com)可以访问物理存贮器和I/O口,但它其实是用一个WDM Device Driver来实现的。这个库的接口DLL会自动的加载一个.sys驱动程序,然后把需要访问的物理地址和I/O信息传到Kernel里,操作完成后在返回给应用程序。

  但是在函数的调用过程中,引用和指针又不一样,引用往往会在编译器的代码里面,加上一个自动搬移的过程,也就是把那个值搬过来。
=========================================
  还是看个简单的例子吧。 其中的汇编代码是Debug模式下VC的汇编视图里拷贝出来的。

  #include <iostream>
  using namespace std;

  struct A
  {
      int  a;
      long b;
  };

  void handle_1(struct A *a)
  {
      a->a = 0x1234;
      a->b = 0x4321;
  }

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

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

相关文章

关注我们

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