总是强调初始化,却总是忘。
今天做抓包程序,打开网卡驱动的时候,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。所以,一个好的编程习惯是定义变量时初始化