内存管理
来源:互联网 发布:一键部署java环境 编辑:程序博客网 时间:2024/06/07 15:39
6.1数据存放
bss段(未初始化的全局变量):4MB 存放没有初始化的 / 初始化为0 的全局变量
data段(初始化过的全局变量): 存初始化过的数据
radata段(常量数据):
text段(代码):放代码和部分常量
stack段(栈):放临时变量和函数参数
heap(堆):malloc :分配一块指定大小的内存
realloc :调整 / 重分配一块内存
free :释放不再使用的内存
6.2内存分配方式
1)从静态存储区分配:编译时就分配好了
2)在栈上分配 :内部局部变量,函数执行结束自动释放
3)在堆上分配 (动态内存分配):程序运行时用malloc / new 分配内存,手动用free / delete 释放
6.3野指针
成因:1)指针变量未初始化
2)指针被free、delete后未置NULL
6.4常见内存错位及对策
错误预防 内存分配未成功assert分配成功,但未初始化就引用他别忘赋初值操作越过内存边界 忘记释放内存,泄漏内存 释放内存,却使用了它(p!=NULL)/ if (p!=NULL)
6.5 段错误及调试方法
1)用gdb逐步查找段错误 gcc -g -rdynamic xxx.c ;gdb ./a.out
2)分析core文件 gdb ./a.out core
3)段错误时启动调试
4)利用backtrace和objdump 分析 objdump -d a.out
6.6指针与数组对比
数组:在 静态存储区/栈 被创建,数组名对应着一块内存。地址和容量在生命周期内不变,内容可变
指针:可随时指向任意类型的内存块,指针操作动态内存。比数组灵活,但也危险
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- 内存管理
- Shell技巧小结~
- 相对布局RelativeLayout的那些事
- 七种qsort排序方法
- Google Assistant SDK预览版发布
- C++中多线程与Singleton的那些事儿
- 内存管理
- 升级到ambari2.4后AMBARI_METRICS自动停止问题及部分机器不显示Metrics问题
- Tensorlfow 数据读取之TFRecords
- python写word
- PAT1049 数列的片段和
- 15年山东第六届acm省赛 C题 Game!(博弈)
- NB-IoT(窄带物联网)相关知识
- 登陆时候验证码的玩儿法
- 性能优化二十三之Service进程防杀死