C语言首页投稿(暂停使用,暂停投稿)

C语言中一些关于内存四区的归纳

2017-09-23  本文已影响198人  没想好昵称呵

C语言中一些关于内存四区的归纳

博文参考传送门

一、综述

C语言程序中,代码是放在内存中执行的,我们大致将程序所占用的内存分为四个区域:

每个程序都有唯一一个内存四区,我们应该掌握各个区域的特性,例如存储哪种类型的数据,由谁去申请开辟,又由谁去管理释放等等。

二、内存四区介绍

1. 栈区

由编译器自动分配释放,比如存放函数的参数值,局部变量等。
例如:

void recive(int a,int b) {
    int c;
}

其中,参数a,参数b和变量c都是存放在栈区,当函数执行完毕的时候,它们占有的空间自动释放。

2. 堆区

一般由程序员分配释放(如动态内存申请<malloc函数>),若程序员不释放,程序结束时可能由操作系统回收。
例如:

char *src;
src = (char*)malloc(4 *sizeof(char));//动态分配内存,表示查找可用的连续4个字节内存的空间,并将该内存首地址强制转换为指向字符数据的指针赋给scr,为src这个指针变量分配4个char类型的空间。
3.数据区

分为两种:1、常量区:存放常量,一般是字符串常量。
2、全局区(静态区):存放全局变量和静态变量。
该区域是在程序结束后由操作系统释放。

4.程序代码区

这个区域存放函数体的二进制代码,也是由操作系统进行管理。

三、划分内存四区的意义

C语言程序中,根据是局部变量,全局变量,常量还是其他,通过malloc等类似的函数分配内存空间,把他们放到对应的内存区中,这样就赋予了这些变量或常量不同的生命周期。
根据我们程序的需要,我们在编写代码过程中,声明不同的变量类型,使他们有不同的声明长度,不同的释放方式,可以让我们更加灵活地编程。

四、内存四区的一个实例

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    char* p1[3]= {"abc","def","ghi"};
    char p2[3][4]= {"123","456","789"};
    char** p3= (char**)malloc( 3 * sizeof(char*));
    for(i=0;i < 3;i++)
    {
        p3[i]= (char *)malloc ( 5 * sizeof(char));
        sprintf(p3[i],"%d%d%d",i,i,i);  
        /*
        sprintf()函数:最常见的应用之一是把整数打印到字符串中
        例如:
        srpintf(s,"%d",123);
        输出为:"123"
        输出结果不会打印在屏幕上,而是写入字符串中
        */
        printf("%s\n",p3[i]);
        /*
        printf()函数才将结果输出到屏幕上
        */
    }
    free(p3);
    return 0;
}

示例代码图示:

示例代码图示
上一篇下一篇

猜你喜欢

热点阅读