c语言中malloc申请的空间和直接定义变量申请的空间有什么区别?
1. malloc事先分配好了内存空间。要点有三点:一是空间分配的连续性;二是动态内存申请;三是防止程序执行中出现异常错误。
如果用数组定义:charp[64000],表示的是声明了一个数组,此数组的大小64000个字节。但是,请注意要点:系统这时并没有为其分配内存。只是在使用时才分配。
对于p[64000]这种写法,如果系统没有足够多的内存使用,那么p[lp]所指向的,可能就是一个其它变量了,或者说p[lp]把其它变量空间覆盖了。这样最容易出现bug。
2. 生命周期
有些变量,存在存在与多个函数或多个线程,那么局部变量不能满足使用,但到一定阶段这个变量又不需要了,那么就要释放,所以全局变量也不适合,那么使用malloc申请内存最为适合。申请和释放比较灵活。3. 可以申请一大段连续内存。
这一段大内存,可以存储复杂结构体,可以灵活存储各种类型。自己手动分配,灵活指定数据偏移等等。
“
malloc 之后的空间 也要初始化为 0,可能会有垃圾,使用memset。
在虚拟机上就出现了,长期调试,不关机,会发现有问题,内存里有垃圾。”
本人调试时发现的。
本文探讨了C语言中通过malloc动态分配内存与直接定义变量申请内存的区别,包括内存连续性、生命周期管理和灵活性。malloc允许在运行时动态分配内存,适用于跨函数或线程的变量,且能分配大块连续内存。然而,malloc后的内存可能含有垃圾,需要初始化。直接定义的变量在使用时才分配内存,可能导致内存冲突。文章还提到了调试时遇到的问题和解决方案。


被折叠的 条评论
为什么被折叠?



