一步一步学Linux C:华为面试题之Variable

Linux C华为面试题:

程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

一点小总结:

1、关于堆栈,印象最深的就是在做uboot移植,在你准备进入c代码时,你必须给c代码一个良好的运行环境,其中重要的一项就是设置堆栈。

2、关于静态内存分配和动态内存分配的区别及过程

1) 静态内存分配是在编译时完成的,不需要占用CPU资源;动态分配内存是在运行时完成的,动态内存的分配与释放需要占用CPU资源;

2) 静态内存分配是在栈上分配的,动态内存是堆上分配的;

3) 动态内存分配需要指针或引用数据类型的支持,而静态内存分配不需要;

4) 静态分配内存需要在编译前确定内存块的大小,而动态分配内存不需要编译前确定内存大小,根据运行时环境确定需要的内存块大小,按照需要分配内存即可。可以这么说,静态内存分配是按计划分配,而动态内存分配是按需分配。

5) 静态分配内存是把内存的控制权交给了编译器,而动态内存是把内存的控制权交给了程序员;

综上所述,静态分配内存适合于编译时就已经可以确定需要占用内存多少的情况,而在编译时不能确定内存需求量时可使用动态分配内存;但静态分配内存的运行效率要比动态分配内存的效率要高,因为动态内存分配与释放需要额外的开销;动态内存管理水平严重依赖于程序员的水平,如果处理不当容易造成内存泄漏。