美文网首页IT共论我是程序员;您好程先生;叫我序员就好了
百度笔试题:全局变量和局部变量在内存中的区别

百度笔试题:全局变量和局部变量在内存中的区别

作者: 开点工作室 | 来源:发表于2016-06-27 10:25 被阅读0次

有这样一道笔试题,包括百度、中兴在内的很多公司都曾在笔试面试中出过该题目:

请回答全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

该题目的解析如下:

答:有区别。全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。

该题目考查的知识点是变量的存储类型及性质。C语言经过编译之后将内存分为以下几个区域:

(1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结构中的栈。

(2)堆(heap):用于程序动态申请分配和释放空间。C语言中的malloc和free,C++中的new和delete均是在堆中进行的。正常情况下,程序员申请的空间在使用结束后应该释放,若程序员没有释放空间,则程序结束时系统自动回收。注意:这里的“堆”并不是数据结构中的“堆”。

(3)全局(静态)存储区:分为DATA段和BSS段。DATA段(全局初始化区)存放初始化的全局变量和静态变量;BSS段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。

(4)文字常量区:存放常量字符串。程序结束后由系统释放。

(5)程序代码区:存放程序的二进制代码。

显然,C语言中的全局变量和局部变量在内存中是有区别的。C语言中的全局变量包括外部变量和静态变量,均是保存在全局存储区中,占用永久性的存储单元;局部变量,即自动变量,保存在栈中,只有在所在函数被调用时才由系统动态在栈中分配临时性的存储单元。

有兴趣的读者可以运行下面的程序,分析一下运行结果。

include <stdio.h>

include <stdlib.h>

int k1 = 1;
int k2;
static int k3 = 2;
static int k4;
int main( )
{ staticint m1=2, m2;
inti=1;
charp;
charstr[10] = "hello";
char
q = "hello";
p= (char *)malloc( 100 );
free(p);
printf("栈区-变量地址 i:%p\n", &i);
printf(" p:%p\n", &p);
printf(" str:%p\n", str);
printf(" q:%p\n", &q);
printf("堆区地址-动态申请:%p\n", p);
printf("全局外部有初值 k1:%p\n", &k1);
printf(" 外部无初值 k2:%p\n", &k2);
printf("静态外部有初值 k3:%p\n", &k3);
printf(" 外静无初值 k4:%p\n", &k4);
printf(" 内静态有初值 m1:%p\n", &m1);
printf(" 内静态无初值 m2:%p\n", &m2);
printf("文字常量地址 :%p, %s\n",q, q);
printf("程序区地址 :%p\n",&main);
return0;
}
更多技术文章请关注微信公众号:开点工作室(ID:kaidiancs)

相关文章

  • iOS 内存管理

    1 面试:全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 局部变量定义在局部的空间,全局变量定义在全局...

  • 百度笔试题:全局变量和局部变量在内存中的区别

    有这样一道笔试题,包括百度、中兴在内的很多公司都曾在笔试面试中出过该题目: 请回答全局变量和局部变量在内存中是否有...

  • iOS基础:全局变量·静态变量·局部变量·自动变量(static

    引言:包括百度、中兴在内的很多公司都曾在笔试面试中出过下面题目 问题:全局变量和局部变量在内存中是否有区别?如果有...

  • 你真的理解static吗?

    static修饰的全局变量与普通的全局变量的区别static修饰的局部变量和普通局部变量的区别static修饰的函...

  • 堆和栈

    栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),fo...

  • C语言内存分配(重)

    内存分配的类型: 静态内存分配: 全局变量、静态全局变量、静态局部变量; 静态内存分配是在程序编译时分配的内存空间...

  • 识别反汇编

    全局变量与局部变量 全局变量直接采用内存地址,在内存中写入数据,以后使用时直接引用内存地址,程序完成前不清理内存。...

  • Javascript笔记,想起来什么写什么

    局部变量,创建时开辟内存,函数执行完就会释放内存,局部变量从而也会消失。 全局变量,一直存在内存中,直到程序运行结...

  • JAVA基础(三)

    局部变量和成员变量的区别? 在类中的位置不同:成员变量在类中方法外;局部变量在方法内或者方法声明上; 在内存中位置...

  • C++面试考点总结

    static作用是什么?在C和C++中有何区别? static可以修饰局部变量(静态局部变量)、全局变量(静态全局...

网友评论

    本文标题:百度笔试题:全局变量和局部变量在内存中的区别

    本文链接:https://www.haomeiwen.com/subject/wbezdttx.html