您的位置:首页 > 编程语言 > C语言/C++

一道有意思的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
从运行结果可以看出,如果结构大小按照一定顺序排列,得到结构体占用内存空间比较小,否则占用的内存空间比较大。由此我们可以得到这道题的答案是:如果原有的结构体是按照变量占用空间从小到大(从大到小),我们插入的变量也占用内存空间比较小则在结构体的前部插入(后部),否则插入结构体的后部(前部);如果结构体本身没有顺序,我们一般插入到后部,有利于修改。由此可以见,我们定义结构体的时候变量占内存大小应该按照一定的顺序排列,这样定义后的结构体占用内存控件比较少。(以上只是个人见解)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 语言 c struct 腾讯