内存管理及结构体的一些问题

1.未初始化的全局变量(.bss)和初始过的全局变量(.data)的区别?

bss类型的全局变量只占运行时的内存空间,而不占文件空间;data段用来存放那些初始化为非零的全局变量,既占文件空间,又占运行空间。在整个程序的运行周期内,data数据是一直存在的。


2.常量数据(.rodata)的问题?

常量不一定就放在rodata里,有的立即数直接和指令编码在一起,存放在代码段(.text)中。

字符串会被编译器自动放到rodata中,其他数据要放到rodata中,只要加const关键字就修饰好了。

 

3.(stack)的作用?

用来存放临时变量和函数参数。可以用来实现函数的调用。

 

4.堆

malloc:用来分配一块指定大小的内存

realloc:用来调整/重分配一块存在的内存

free:用来释放不在使用的内存

 

5.使用堆内存的注意点

·malloc/free要配对使用

·每个区间都有四个属性

 

6.野指针的成因?

·指针变量没有初始化

·指针pfreedelete之后,没有置为NULL,让人误以为p是个合法的指针

 

7.常见的内存错误

(1)内存分配未成功,却使用了它

(2)内存分配虽然成功,但尚未初始化就引用它

(3)内存分配成功并且已经初始化,但操作越过了内存的边界

(4)忘记了释放内存,造成内存泄漏

(5)释放了内存,却继续使用它

 

8.什么是段错误?

段错误就是指访问的内存超出了系统所给这个程序的内存空间,即访问了错误的内存段。

 

9.结构体和联合体的区别?

structunion都是由多个不同的数据类型成员组成的,但在任何同一时刻,union中只存放了一个被选中的成员,而struct的所有成员都存在。

一个struct变量的总长度等于所有成员长度之和,union变量的长度等于最长的成员的长度。

 

10.什么是预处理?

预处理是指在进行编译的第一遍扫描之前所做的工作。宏定义、文件包含、条件编译等都在预处理阶段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值