首页 > 试题广场 >

请谈一下你对C语言内内存分配与使用的理解及注意事项。

[问答题]
请谈一下你对C语言内内存分配与使用的理解及注意事项。
栈上分配内存要点
1、需要时分配,用完就释放,特别是堆上的(资源很有限)。
2、避免分配大量小块内存,因为堆上内存的分配由于有系统开销,所以分配许多的小内存比分配几块大内存开销要大,而已不便于释放和管理。
3、编程的时候始终把用户有限的内存放在心上,分配了就要考虑在哪里释放。
4、循环中分配内存一定要小心翼翼
5、释放内存之前,确保不会无意中覆盖堆上分配的内存地址,否则会出现内存泄露。
发表于 2022-08-11 22:08:30 回复(0)
程序的栈区域是有限的,声明局部变量有时并不能满足所需的内存大小,这时就需要用户在堆区自己分配。
注意事项:内存分配完后,结束使用时一定记得释放,避免内存泄漏;如果有指针指向分配的内存,内存释放后,也需将指针释放,避免出现野指针。
发表于 2022-06-28 20:49:34 回复(0)
在c程序中内存分为:栈区、堆区、全局/静态存储区、常量存储区、代码区
栈区:程序在需要时自动申请,自动销毁
堆区:程序员主动申请,需要手动销毁,不然只有等程序结束才能销毁
静态存储区:全局变量和静态变量存储在一块,初始化全局变量和静态变量存放在一块,程序结束后由系统自动释放
常量存储区:由const 修饰,只读不写
代码区:存放二进制代码
发表于 2022-11-09 18:49:34 回复(0)
0-3G为用户空间,3-4G为内核空间
0-3G中又分为栈区,堆区,静态区
静态区又分为.bss段, .data段,RO段,代码段
data段用来存储已经初始化的全局变量和静态变量
bss用来存储未初始化的全局变量或者未初始化的静态变量
ro用来存储字符串常量
代码段用来存储代码
堆区需要用户手动申请,需要手动释放,要不容易内存泄漏
发表于 2022-10-20 09:20:26 回复(0)
C语言的内存模型为:全局数据区包括:初始化、未初始化部分和常量区、堆、栈
在代码段内声明的变量属于局部变量,以及函数参数都存放在栈区,离开其生存的代码段会自动回收。
声明在函数体外的全局区域的变量,属于全局变量,存放在全局数据区。static修饰的变量也存放在全局数据区。
通过malloc申请的内存在堆区,需要通过free手动释放。
在编译之前就写好的常量存放在常量区,在程序结束之前的位置都是固定的,不会改变。程序结束后自动回收。
发表于 2022-10-10 23:32:31 回复(0)
程序的栈区是有限的,有时候声明一个局部变量,实际内存并不能满足所需要的大小,这时候就需要手动在堆区分配 注意事项:堆区空间需要手动释放,避免内存泄露;如果有指针指向分配的内存,内存释放后也需要将指针进行释放,避免出现野指针
发表于 2024-03-05 12:08:22 回复(0)
栈区的内存是用来存储局部变量的,当包含该局部变量的程序块执行结束,局部变量占用的栈区内存就会被自动释放;
堆区的内存是在使用时动态分配的,释放时要通过free手动释放,不然程序结束后堆区内存还会一直被占用。释放内存后指向堆区内存的指针会变成野指针,不能进行解引用操作。
发表于 2022-10-13 14:05:23 回复(0)
没人讨论吗?
发表于 2022-05-02 05:31:41 回复(0)