[C/C++面试题]全局变量与局部变量的区别以及在内存上的分配

全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?

局部变量:函数内部定义的非静态变量就是局部变量;
全局变量:函数外部定义的非静态变量就是全局变量。
在操作系统中,全局变量存储在内存的静态存储区域,而局部变量存放在栈区。
两者的作用域不同,全局变量从定义位置开始到程序结束,而局部变量只限定义的函数内可使用,全局变量在数据段,而局部变量在栈,局部变量在函数结束时内存空间就被系统收回,所以要返回的数组或字符串不要用局部变量定义。
操作系统和编译器变量分配内存时,从变量的定义和存储区域来分别局部变量和全局变量。

全局变量可不可以定义在被多个.c文件包含的头文件中?为什么?

可以,在不同的c文件中以static形式来声明同名全局变量,前提是其中只能有一个C文件中对此变量赋初值。

描述内存分配方式以及它们的区别

(1)静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如:全局变量、static变量。
(2)在栈上创建:在执行函数时,函数内局部变量的存储单元都可以在栈上创建。函数执行结束时自动被释放。栈内存分配运算内置于处理器的指令集。
(3)从堆上分配,即是动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也很多。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值