内存管理

2020-12-21  本文已影响0人  StevenHD

一、进程空间

蓝色标出了真实使用的内存大小


蓝色标出了真实使用的内存大小

二、栈内存

栈的大小是10M,栈不能存放大量的数据,栈是用来数据交换

2.1 栈溢出

2.2 栈的发展方向


三、堆内存

3.1 堆的申请大小


四、堆内存的申请与释放

代码

4.1 申请和初始化的最小单位均是字节

所以我们使用memset,最后得到的10个数并不是1,而是一个很大的数字,因为每个数是4个字节,每个字节是01,所以就是十六进制的01010101,也就是十进制的16843009


4.2 小陷阱


这个程序这样写最后会导致程序崩溃,因为pa最后会偏离原先的位置,那么之前memset分配的40个字节就不再与现在的pa适配,最后就会导致崩溃,所以如果要这样写,提前拷贝一份即可——

4.3 calloc的使用

五、realloc的使用

auto类型修饰的局部变量在栈上,static修饰的局部变量不在栈上

5.1 用于扩容的realloc


比如上面的newPa是可能和pa不相等的

5.2 free的使用


任意+1-1会导致程序崩溃

六、服务器导致的内存泄漏


代码

七、堆内存的使用

7.1 置空很重要


申请内存,判断是否申请成功,strcpy则对应的使用,然后free释放,然后pc = NULL则是置空——
置空的重要性

7.2 谁申请谁释放


main()函数中申请的就main()函数中释放

7.3 开放的地址空间

7.4 堆与栈空间的返回

上一篇 下一篇

猜你喜欢

热点阅读