OS--内存

来源:互联网 发布:Mac电脑打魔兽世界卡吗 编辑:程序博客网 时间:2024/05/01 04:23

1. 全局区

2. 代码区

3. 堆区

4. 栈区


1. 全局区

静态数据,全局数据

static int s_i=0; int g_i=0;


2. 代码区

代码,代码中的魔术字(比如字符串"abc", 1+2等)


3. 堆区

new或malloc出来的内存区域。现在系统中一般预分配;即使不预分配也会使用内存池来在应用层回收和重用。从而减少内存碎片和系统更加稳定(减少内存分配失败的异常处理)


4. 栈区

上下文,C/C++那些数组定义,非malloc或者new,或者c#的值类型(int, ,,,struct)。

一般为了避免嵌套太多,或者编码的异常触发,,,一般要把默认栈大小弄大点。

LIFO队列


一般栈速度要比堆块。

a. 栈有sp寄存器来专门放地址,堆还要去内存中(栈)找。。。。

b. 如果不是预分配或者内存池,堆的分配和回收要复杂多,要查找足够大的区块,要碎片整理。而栈只是一个数值的增加就行了。

总结:一般影响不大,只是那些特别核心频率特高的函数需要注意一下,毕竟还是有10~20%的速度差异的(主要是#a的原因)

原创粉丝点击