一道有意思的C语言面试题
2010-08-03 22:38
253 查看
今天在网上看见有人去腾讯面试,面试管问了一道关于C语言结构的问题,题目意思大概是:往C结构体里面增加变量,插到那个位置比较好?前部、中部还是后部?
个人仔细研究了一下这个题目,发现面试官有可能在询问面试者关于结构体内存对齐方式和使用效率方面的知识。
假设我们的结构体包括一个int a,char b,还有double c三个变量,按照三个变量定义先后不同顺序,我们可以得到以前结构体:
struct A1
{
char a;
int b;
double c;
};
struct A2
{
char a;
double c;
int b;
};
struct A3
{
int b;
char a;
double c;
};
struct A4
{
int b;
double c;
char a;
};
struct A5
{
double c;
int b;
char a;
};
struct A6
{
double c;
char a;
int b;
};
我们在VS 2008运行的结果如下:
A1的空间大小为:16
A2的空间大小为:24
A3的空间大小为:16
A4的空间大小为:24
A5的空间大小为:16
A6的空间大小为:16
从运行结果可以看出,如果结构大小按照一定顺序排列,得到结构体占用内存空间比较小,否则占用的内存空间比较大。由此我们可以得到这道题的答案是:如果原有的结构体是按照变量占用空间从小到大(从大到小),我们插入的变量也占用内存空间比较小则在结构体的前部插入(后部),否则插入结构体的后部(前部);如果结构体本身没有顺序,我们一般插入到后部,有利于修改。由此可以见,我们定义结构体的时候变量占内存大小应该按照一定的顺序排列,这样定义后的结构体占用内存控件比较少。(以上只是个人见解)
个人仔细研究了一下这个题目,发现面试官有可能在询问面试者关于结构体内存对齐方式和使用效率方面的知识。
假设我们的结构体包括一个int a,char b,还有double c三个变量,按照三个变量定义先后不同顺序,我们可以得到以前结构体:
struct A1
{
char a;
int b;
double c;
};
struct A2
{
char a;
double c;
int b;
};
struct A3
{
int b;
char a;
double c;
};
struct A4
{
int b;
double c;
char a;
};
struct A5
{
double c;
int b;
char a;
};
struct A6
{
double c;
char a;
int b;
};
我们在VS 2008运行的结果如下:
A1的空间大小为:16
A2的空间大小为:24
A3的空间大小为:16
A4的空间大小为:24
A5的空间大小为:16
A6的空间大小为:16
从运行结果可以看出,如果结构大小按照一定顺序排列,得到结构体占用内存空间比较小,否则占用的内存空间比较大。由此我们可以得到这道题的答案是:如果原有的结构体是按照变量占用空间从小到大(从大到小),我们插入的变量也占用内存空间比较小则在结构体的前部插入(后部),否则插入结构体的后部(前部);如果结构体本身没有顺序,我们一般插入到后部,有利于修改。由此可以见,我们定义结构体的时候变量占内存大小应该按照一定的顺序排列,这样定义后的结构体占用内存控件比较少。(以上只是个人见解)
相关文章推荐
- 一道不错的c语言面试题
- 一道有意思的面试题
- 华为一道c语言面试题
- [笔记]一道C语言面试题:判断字串是否可以通过重新排列字母使之对称
- 一道面试题引发的关于c语言中文件操作的总结
- [笔记]一道C语言面试题:得到整数的M进制表示字符串
- [笔记]一道C语言面试题:IPv4字符串转为UInt整数
- 关于 parseInt 的一道有意思的面试题
- 一道有意思的面试题
- 一道有意思的C语言编程题
- 关于 parseInt 的一道有意思的面试题
- 一道C语言面试题
- 一道C语言面试题printf输出问题,高手们都来看看吧
- 一道有意思的Google面试题
- 一道简单有趣的C语言面试题
- 一道C语言面试题
- 一道比较有意思的Java面试题
- 2007年10月华为技术的一道C语言面试题