内存管理 预处理 结构体
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。
答:(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。
相关文章推荐
- 2018.3.13预习内存管理,预处理,结构体
- 内存管理、预处理、结构体预习
- 内存管理与预处理,结构体问题
- C预习内存管理、预处理、结构体的相关问题
- 预习内存管理和预处理、结构体
- 内存管理 与 预处理、结构体 预习问题
- 内存管理,预处理,结构体
- 内存管理,预处理,结构体预习需要注意的地方
- 内存管理、结构体、预处理问题解答
- 内存管理 预处理 结构体
- 内存管理、预处理、结构体预习十问
- 内存管理,预处理,结构体
- 学习内存管理和预处理,结构体时所遇到的问题。
- .net 互操作之p/invoke- 数据封送(结构体传参,返回值,内存管理)(3)
- 内存管理,结构体
- 黑马程序员_C_结构体与预处理
- C语言预处理、结构体和make的使用--C语言预处理命令
- C语言第十章:结构体、枚举、预处理指令
- 黑马程序员——C复杂数据类型--变量、结构体、预处理
- oc加强day5-NSFileManger、NSPoint与CGPoint等简单结构体、简单数据类型的封装、集合对象的内存管理、copy、单列模式