C/C /OC内存五大区

C/C /OC内存五大区

首页角色扮演代号OC更新时间:2024-05-07

不管我们写C/C ,还是写OC代码,我们都有必要对内存管理熟练掌握。在计算机系统,特别是嵌入式系统中,内存资源是非常有限的。尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首先要考虑的问题就是如何有效地管理内存资源。

内存主要分为五大区,内存由低地址到高地址依次是代码区、常量区、全局静态区(BSS静态区 数据区静态区),堆区,栈区。

我们从高地址往低地址依次来认识这几个区域:

栈区

栈区:由编译器分配和释放,用于存放程序临时创建的变量,函数的参数,局部变量等。

特点:是一块连续的内存区域,遵循先进后出的原则;由高地址向低地址的数据结构。

优点:栈是由编译器分配和释放,不会产生碎片,快速高效。

缺点:内存大小有限制

堆区

堆区:由程序员分配和释放,用于存放运行中动态分配的内存段。大小不定,可增加和减缩。程序运行的时候,操作系统会给它分配一段内存,用来存储程序和运行时产生的数据,这段内存有起始地址和结束地址,起始地址是低地址,结束地址是高地址。程序在运行过程中,对于动态的内存占用请求(比如alloc),系统会从预先分配好的那段内存之中,划出一部分给程序员使用。

特点:内存区域是不连续的;遵循先进先出原则;由低地址向高地址扩展的数据结构。C/C 中使用malloc,calloc,realloc分配的空间在堆上,OC中使用alloc,new创建的对象分配的空间在堆上。需要手动释放或者由垃圾回收机制来回收。

优点:灵活方便,随取随用,内存大小无限制。

缺点:需要手动管理,效率低下,容易产生内存碎片。访问堆中的内存时,需要先通过对象读取到栈区的指针地址,然后通过指针地址访问堆区。

全局区

全局区:编译时分配的内存空间,在程序运行过程中,此内存中的数据一直存在,程序结束后由系统释放。static修饰的变量保存在全局区。

数据区:用来存放可执行文件中已经初始化的全局变量,也就是用来存放静态分配的变量和全局变量。

BSS区:程序中未被初始化的全局变量。

常量区

常量区:编译时分配的内存空间。在程序结束后由系统释放。存放的是常量,是一块特殊的区域。

代码区

用来存放函数等二进制代码。它是执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,只运行读取操作,不允许写入操作。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved