一、内存区域 C/C++编译的程序占用的内存分为以下几个区域 代码区 全局区/静态区 栈区 堆区 划分: 程序运行前: 代码区、全局区/静态区 程序运行后:栈区、堆区 二、内存四区 2.1 代码区 作用:存放CPU执行的二进制机器指令 特点: 只读 共享 2.2 栈区 特点: 栈是一种先进后出的内存结构,由编译器自动...
定义:堆区用于动态分配内存,即程序运行时使用malloc、new等函数分配的内存。 特点:1、可以动态分配和释放大块内存。 2、内存由程序员手动管理,需要手动释放(使用free函数)。 3、内存分配效率相对较低,但空间较大。 其生命周期由 free 或 delete 决定。 在没有释放之前一直存在,直到程序结束。 1.3 数据段(Data Se...
-- 内存限制 : stack 内存是连续的, 从高位向低位扩展, 而且很小, 只有几M, 是事先定好的, 在文件中配置; heap 是不连续的, 从低位向高位扩展, 系统是由链表控制空闲程序, 链表从低地址到高地址, 堆大小受虚拟内存限制, 一般32位机器有4G heap; -- 申请效率 : stack 由系统分配, 效率高; heap 由...
const修饰的全局变量存放在常量区。 程序运行期间,常量区的内容不可以被修改。 5. 代码区 程序执行代码存放在代码区,其值不能修改(若修改则会出现错误)。 字符串常量和define定义的常量也有可能存放在代码区。 二、STM32存储器分配 1. 随机存储器—RAM RAM是与CPU直接交换数据的内部存储器,也叫主存(内存)。 它...
一、c语言五大内存分区 栈区(stack):存放函数形参和局部变量(auto类型),由编译器自动分配和释放 堆区(heap):该区由程序员申请后使用,需要手动释放否则会造成内存泄漏。如果程序员没有手动释放,那么程序结束时可能由OS回收。 全局/静态存储区:存放全局变量和静态变量(包括静态全局变量与静态局部变量),初始化的全局变...
} // 栈内存在超出作用域后自动释放 int main() { foo(6); getchar(); return 0; } // 加载阶段加载的内存要等到程序结束才释放 文件的内容分割为不同的区块(Setion,又称区段,节等),区段中包含代码数据,各个区块按照页边界来对齐,区块没有限制大小,是一个连续的结构。每块都有他自己在内存中的属性,...
c语言五大内存分区 栈区(stack) 由编译器自动分配和释放,主要用于存放函数的参数值、局部变量的值等。数据采用先进后出(FIFO)的规则,即在函数执行完毕后,栈上的数据会被自动清除。 堆区(heap) 由程序员手动分配和释放,如果程序员使用完这块内存没有手动释放内存,可能会造成内存泄露,程序结束时由操作系统回收。堆...
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆...