c语言中变量(存储区 栈)和malloc(动态申请 堆)的区别

1、变量:

不管全局变量还市局部变量都是系统自动分配管理的(静态储存区和动态存储区即栈),全局变量如果不人工初始化时系统会自动初始化;对于静态局部变量,编译时自动赋初值初始化;自动局部变量不初始化,他的值是不确定的,因为每次函数调用结束后储存单元已经释放,下一次调用是又重新分配存储单元,而其中内存的内容是不知道的。

2、

malloc可以随时开辟,不用时随时释放。这些数据是临时存放在一个特别的自用存储区,称其为堆。由于未在声明部分定义他们为变量或数组,因此不能通过变量名或数组去引用这些数据包,只能通过指针来引用。malloc分配出的空间不会被系统自动初始化,在使用前一定要初始化。

3、

在写程序时,一定不要把局部变量的地址作为函数的返回值。一档尽量避免返回在函数内使用的分配函数(mnalloc或new)分配的内存空间,及使用malloc和free一定要成对的出现。

4、

malloc动态申请的空间,一直到它被释放为止,都是有效的。

5、

注意变量的作用域和存储期。

猜你喜欢

转载自blog.csdn.net/zhou_qiao62/article/details/53981539