全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
局部变量:函数内部定义的非静态变量就是局部变量;
全局变量:函数外部定义的非静态变量就是全局变量。
在操作系统中,全局变量存储在内存的静态存储区域,而局部变量存放在栈区。
两者的作用域不同,全局变量从定义位置开始到程序结束,而局部变量只限定义的函数内可使用,全局变量在数据段,而局部变量在栈,局部变量在函数结束时内存空间就被系统收回,所以要返回的数组或字符串不要用局部变量定义。
操作系统和编译器变量分配内存时,从变量的定义和存储区域来分别局部变量和全局变量。
全局变量可不可以定义在被多个.c文件包含的头文件中?为什么?
可以,在不同的c文件中以static形式来声明同名全局变量,前提是其中只能有一个C文件中对此变量赋初值。
描述内存分配方式以及它们的区别
(1)静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如:全局变量、static变量。
(2)在栈上创建:在执行函数时,函数内局部变量的存储单元都可以在栈上创建。函数执行结束时自动被释放。栈内存分配运算内置于处理器的指令集。
(3)从堆上分配,即是动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也很多。