编程范式8 笔记 C/C++内存
来源:互联网 发布:报表类软件 编辑:程序博客网 时间:2024/05/18 00:30
heap
在低地址
malloc分配heap的地址
int* arr=malloc(40*sizeof(int));
160B(实际164B或者168B,多出来的在头部,用于记录大小等信息,但是返回的指针是在这个头的后面)
执行free函数时,指针会机械地回退4B or 8B 获取大小信息,并且free掉后面相应大小的内容
int* arr=malloc(100*sizeof(int));free(arr+60);//出错,指针会调到arr+58/59,将这里面的内容解释为内存块大小再释放
int arr[100];//这样静态申请与堆无关,但也有head信息free(array);arr[-1]=0;//这样把头覆盖掉了,会出错
空闲的空间组成一个链表,每个head信息都记录了大小,下次malloc的时候遍历一遍
怎么分配《操作系统》会讲
free只是把内存块加到空闲链表,因为反正可以覆盖
操作系统可以把分散的零碎的空间弄成连续的空间,返回句柄(二级指针,是一个指针列表)
void** handle=NewHandle(40);Handlelock(handle);//告诉操作系统不要挪动NewHandle指向的内存,它们正在被句柄寻址HandleUnlock(handle);
stack
void A(){ int a; short b[4]; double c; //从栈里分配内存 B(); C();}
栈里有指针(栈指针)记录已分配和未分配的边界,每有一个新函数分配局部变量,他会移动,并将移动后的地址作为函数访问变量的基地址;函数返回后,栈指针回退。
void B(){ int x; char* y; char* z[2]; C();}void C(){ double m[3]; int n;}
汇编代码
简单讲了下
假设RAM有32个通用寄存器
ALU进行加法乘法移位操作
阅读全文
0 0
- 编程范式8 笔记 C/C++内存
- 编程范式--c语言
- 编程范式4 笔记 C语言泛型
- 编程范式3 笔记 struct 内存模型
- 《c专家编程》笔记--linux内存对齐
- c语言范式编程之lsearch
- c语言范式编程入门二
- C内存编程
- c内存分配笔记
- 《高质量C/C++编程》学习笔记3(内存)
- Object-c基础编程学习笔记-内存管理
- 读《C专家编程》笔记-关于内存泄漏
- Objective-C高级编程--多线程和内存管理笔记
- 编程范式学习笔记
- 《编程范式》学习笔记
- 编程范式2 笔记
- 编程范式11 笔记
- 编程范式13 笔记
- my eclipse 安装方编译插件
- HashTable、HashSet和Dictionary的区别
- 1008 电梯
- tbschedule3.3.3+spring+maven实例教程
- 【Leetcode】最小栈
- 编程范式8 笔记 C/C++内存
- 25个最基本的JavaScript面试问题及答案
- 数值优化(Numerical Optimization)学习系列(三)-线搜索
- <安彦>Spring MVC运行原理及案例
- CI Weekly #8 | CI/CD 技能进阶路线
- 批处理解约瑟夫环应用题-shell
- Sass基本特性--运算(加法、减法、乘法、除法、变量运算、数字运算、颜色运算、字符运算)
- spark性能调优的本质、Spark资源使用原理和调优要点分析
- 深度优先搜索(DFS)——部分和问题