C语言——内存分配的方式

    xiaoxiao2021-12-14  18

    1、全局变量和静态变量(static变量),是由编译器自动分配和释放的,初始化的全局变量和静态变量放在同一块内存区中,未初始化的全局变量和静态变量则放在相邻的另外一块内存区中。

    2、栈,是由编译器自动分配和释放的,主要是函数体的地址,参数和局部变量,静态变量不包含其中,操作方式类似于数据结构中的栈。

    3、堆,是由程序员手动完成申请和释放的,像malloc和new,程序员没有手动释放的话,当程序结束时由系统释放没有释放的空间,其实现方式与数据结构中的堆完全不同,此时的堆的实现方式有些类似于数据结构中的链表。

    4、程序代码区,用于存放程序的二进制代码的空间。

    5、文字常量区,像常量字符串等存放在这里,程序结束后由系统释放。

    一个经典的例子:

    [csharp]  view plain  copy    [csharp]  view plain  copy int a = 0; 全局初始化区   char *p1; 全局未初始化区   main()   {   int b; 栈   char s[] = "abc"; 栈   char *p2; 栈   char *p3 = "123456"; 123456\0在常量区,p3在栈上。   static int c =0; 全局(静态)初始化区   p1 = (char *)malloc(10);   p2 = (char *)malloc(20);   分配得来得10和20字节的区域就在堆区。   strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。   }  
    转载请注明原文地址: https://ju.6miu.com/read-972353.html

    最新回复(0)