初始化

总是强调初始化,却总是忘。

今天做抓包程序,打开网卡驱动的时候,lpAdapter =   PacketOpenAdapter(AdapterList[Open-1]);总是失败。

幸亏有参考程序,发现AdapterList数组声明为全局比变量的时候没问题,但是声明成局部变量就有问题。

原因如下:

 

全局变量是在编译时就分配好空间的。这意味着全局变量的大小,会影响exe文件的大小。
例如:
char str[100000] = "helloworld"; //编译出来的exe大小为156K
若改为:
char str[1000000] = "helloworld"; //编译出来的exe大小为1.212M
注意,这里赋了初值。若不赋值,不会影响exe大小,这可能是因为编译器做了优化。

全局变量若没有手工进行初始化,系统会为全局变量自动初始化,即所有的空间都为0,char数组是空字符串,int是0,等等。这项工作是编译器做好的。而局部变量不会自动初始化,因为局部变量是运行时在堆栈上分配的。因此,局部变量大小不会影响exe文件大小。可能考虑到效率问题吧,系统分配好空间后,没有把其全部置为0。所以,一个好的编程习惯是定义变量时初始化

 

posted @ 2011-05-28 15:45  pjh123  阅读(206)  评论(0编辑  收藏  举报