您的位置:首页 > 其它

内存管理 预处理 结构体

2018-02-06 20:19 134 查看
1.系统内存空间如何分配?

答:(1)数据段:bss段,data段,rodata段。

   
bss段:存放那些没有初始化和初始化为0的全局变量;其只占用运行时的内存空间而不占用文件空间。在整个运行周期bss数据一直存

 data段:存放初始化为非0的全局变量;其既占文件空间又占内存空间。在整个运行周期内一直存在。

rodata段:在多个进程间共享,提高空间利用率,甚至不占用RAM空间。同时在只读的内存页面中收到保护,提高程序稳定性。(2)代码段:存放全局变量和部分常量。

 (3)栈:存放局部变量和形参。

(4)堆:其生命周期完全由使用者控制。

2.什么情况下回出现野指针?

答:(1)指针变量没有被初始化。要求在定义指针时对其初始化,设置为NULL或指向一个合法的内存。

 (2)指针p被free或delete之后没有设置为NULL,让人误以为他是合法的。

3.如何解决内存分配未成功就是用他的问题?

答:在使用内存之前检查指针是否为NULL;1.如果指针p是函数的参数,那么在函数人口用“asset(p!=NULL)”进行检查;2.如果是用malloc或new来申请内存,应该用“if(p==NULL)”进行防错处理。

4.文件包含时用的尖括号与双引号的不同?

答:

双引号表示先在程序源文件所在目录查找,如果未找到则去系统默认目录查找,通常用于包含程序作者编写的头文件; 

尖括号表示只在系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件。

5. 条件编译也可以用if语句来实现,那么为什么不用if语句呢?

答:条件编译可以用条件语句宋实现,但是用条件语句将会对整个源程序进自编¥,生成的目标代科序很长,们采目条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较划如果条件选择的程序段很长,采月条编译的方法是十分必要的。

6. 运用宏的优点?

答:在一定程度上减少代码密度,节省空间,间接的也可以减少不留心的错误。

7.用结构体指针变量引用结构体变量中的成员的两种方式是?

答:(1) (结构体指针变量)->成员名:“ps->name”;

(2)(*结构体指针变量).成员名:“(*ps).name”。

8.#define和typedef的区别?

答:typedef是为了增加可读性而为标识符另外起的名字;

#define是为了定义常量。

例如:typedef (int*) p; p a,b; 表示的是int *a;int *b;

#define p int*; p a,b; 表示的是int *a,b;

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

答:1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员, 而结构的所有成员都存在。

2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。

10.位段存储特点?

答:

(1)一个位段必须存储在同一存储单元中,不能跨两个单元。如果第一个单元空间不能容纳下一个位段,则该空间不用,而从下一个单元起存放该位段。

(2) 可以定义无名位段。

(3) 位段的长度不能大于存储单元的长度,也不能定义位段数组

(4) 位段可以用整型格式符输出。

(5) 位段可以在数值表达式中引用,它会被系统自动地转换成整型数。

(6) 位段定义的第一个位段长度不能为0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: