C语言内存管理

    科技2024-07-03  69

    C语言内存管理

    C语言内存结构

    代码区 程序代码指令、常量字符串等内容,一般是整个程序执行期间都不会改变的静态区 全局变量和静态变量栈区 函数内局部变量,参数等堆区 动态内存分配,比如说malloc

    COW(Copy-on-write

    COW的一个典型例子就是fork函数,执行fork()时会产生一个和父进程完全相同的子进程,但子进程在此后exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

    COW主要通过内存页表实现,将相应页置为只读状态,并保存对页的引用数量状态。当页内内容被修改时,引发一个中断,系统创建一个新的物理页,并把修改后的数据写入(这些操作在引用数为1时不做)。然后更新页表和引用计数。

    采用这种方法的好处是减少了fork时的内存复制开销,并且不需要使用锁或者CAS(比较并交换)。

    三种基础内存管理模式

    三种基础内存管理模式分别是:自动,静态和手动(Automatic, Static, and Manual Memory)。

    自动是指当你创建变量时有效,超出变量作用域后被移除。

    静态是整个程序运行期间有效,将在main函数之前初始化。在函数之外的变量或者用static声明的变量都是静态的。

    手动一般使用malloc和free来管理内存。

    Processed: 0.008, SQL: 8