嵌入式C语言内存分区,不同变量、函数介绍学习记录

本文详细解释了内存的分区,包括32位系统中的用户空间和内核空间划分,以及堆、栈、静态全局区、代码区和常量区等不同类型的内存区域。还介绍了普通全局变量、静态全局变量、局部变量和它们的生命周期和作用范围,以及外部函数和内部函数的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、内存的分区(虚拟内存的分区问题)

        内存:物理内存、虚拟内存。

        物理内存:实实在在的存储设备。

        虚拟内存:操作系统虚拟出来的内存。

        操作系统会在物理内存和虚拟内存之间建立一个映射关系。

        在32位系统下,每个进程的寻址范围是 4G,0x00000000 ~ 0xffffffff

        在32位系统中,虚拟内存被分为两个部分,3G的用户空间和1G的内核空间,其中用户空间是当前进程所私有的,内核空间是一个系统所有的进程所公有的。

        在运行程序时,操作系统会将虚拟内存中的用户空间(3G)进行分区:

        (1)堆:在动态申请内存的时候,在堆里开辟内存。

        (2)栈:主要存放局部变量

        (3)静态全局区:1、未初始化的静态全局区:静态变量(定义变量的时候,前面加static修饰),或全局变量,没有初始化的存在此区。2、初始化的静态全局区:全局变量、静态变量、赋过初值的,存放在此区。

        (4)代码区:存放程序代码

        (5)文字常量区:存放常量的。

2、普通的全局变量

        在函数外部定义的变量。

        作用范围:程序的所有地方。不同的.c代码需要通过extern int num,进行声明。声明的时候不能够赋值。

        生命周期:程序运行的整个过程,一直存在,直到程序结束。

        注意:定义普通的全局变量的时候,如果不赋初值,默认为0。

3、静态全局变量(static)

        定义全局变量的时候,前面用static修饰、static int num = 100;

        作用范围:static限定了静态全局变量的作用范围。只能在它定义的.c文件使用。

        生命周期:在程序整个运行过程中,一直存在。

        注意:静态全局变量,如果不赋初值,默认为0。

4、普通的局部变量

        在函数内部定义的,或复合语句中定义的变量。

        作用范围:在函数中定义的变量,在当前函数中有效。在复合语句中定义的,在复合语句中才有效。

        生命周期:在函数调用之前,局部变量不占用空间,调用函数的时候,才为局部变量开辟空间,函数结束了,局部变量就释放了。   在复合语句中亦是如此。

5、静态的局部变量

        定义局部变量的时候,前面加static修饰。

        作用范围:在它定义的函数或复合语句中有效。

        生命周期:第一次调用函数的时候,开辟空间赋值,函数结束后,不释放。以后再调用函数的时候,就不再为其开辟空间,也不赋初值,用的就是以前那个变量。

6、外部函数

        定义的普通函数都是外部函数,即函数可以在程序的任何一个文件中调用。

7、内部函数

        内部函数也称之为静态函数。在定义的时候,返回值类型前面加static修饰。

        static限定了函数的作用范围,仅在定义的.c中有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值