解析:
ss1是一个字符指针,指针的大小是一个定值,就是4字节,所以sizeof(ss1)是4字节。
ss2是一个字符数组,这个数组最初未定大小,由具体填充值来定。填充值
是“0123456789”。1个字符所占空间是1字节,10个就是10字节,再加上隐含的“\0”,所以一
共是11字节。
ss3也是一个字符数组,这个数组开始预分配100,所以它的大小一共是100字节。
ss4也是一个整型数组,这个数组开始预分配100,但每个整型变量所占空间是4,所以
它的大小一共是400字节。
q1与ss2类似,所以是4字节。
q2里面有一个“\n”,“\n”算做一位,所以它的空间大小是3字节。
q3是一个字符指针,指针的大小是一个定值,就是4,所以sizeof(q3)是4字节。
A和B是两个结构体。在默认情况下,为了方便对结构体内元素的访问和管理,当结构
体内的元素的长度都小于处理器的位数的时候,便以结构体里面最长的数据元素为对齐单
位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在长度大于
处理器位数的元素,那么就以处理器的位数为对齐单位。但是结构体内类型相同的连续元素
将在连续的空间内,和数组一样。
结构体A中有3个short类型变量,各自以2字节对齐,结构体对齐参数按默认的8字节对
齐,则a1、a2、a3都取2字节对齐,sizeof(A)为6,其也是2的整数倍。B中a1为4字节对齐,a2
为2字节对齐,结构体默认对齐参数为8,则a1取4字节对齐,a2取2字节对齐;结构体大小为
6字节,6不为4的整数倍,补空字节,增到8时,符合所有条件,则sizeof(B)为8。
CPU的优化规则大致原则是这样的:对于n字节的元素(n=2,4,8,…),它的首地址能被n
整除,才能获得最好的性能。设计编译器的时候可以遵循这个原则:对于每一个变量,可以
从当前位置向后找到第一个满足这个条件的地址作为首地址。例子比较特殊,因为即便采用
这个原则,得到的结果也应该为6字节(long的首地址偏移量0000,short首地址偏移量0004,
都符合要求)。但是结构体一般会面临数组分配的问题。编译器为了优化这种情况,干脆把
它的大小设为8字节,这样就没有麻烦了,否则的话,会出现单个结构体的大小为6字节,而
大小为n的结构体数组大小却为8×(n–1)+6的尴尬局面。IBM出这道题并不是考查理解语言本
身和编译器,而是考查应聘者对计算机底层机制的理解和设计程序的原则。也就是说,如果
让你设计编译器,你将怎样解决内存对齐的问题。
答案:
4,11,100,400,4,3,4,6,8,4,4。

最新文章

  1. RESTful API设计指南
  2. memcpy 和直接赋值的性能差异
  3. Caffe学习系列(14):初识数据可视化
  4. ios中怎么样设置drawRect方法中绘图的位置
  5. html+css--水平居中总结(不定宽块状元素方法)(一)
  6. Taxi Trip Time Winners' Interview: 3rd place, BlueTaxi
  7. UVA 1474 Evacuation Plan
  8. 创建UIView对象
  9. css 禁止长按保存功能
  10. C#学习笔记-工厂模式
  11. SpringMVC 无法访问到指定jsp页面可能的原因
  12. linux文件访问权限(像rw-r--rw-是什么意思)
  13. 网站之.htaccess文件
  14. Vue keep-alive的总结
  15. 看看一个老程序员如何手写SpringMVC!
  16. Android的Fragment中的互相通信-桥梁activity
  17. oracle 命令行
  18. The Little Prince-12/07
  19. Linux性能测试-FIO测试
  20. postgresql----COPY之表与文件之间的拷贝

热门文章

  1. hdu 4530(数学)
  2. Light oj 1233 - Coin Change (III) (背包优化)
  3. ural 1519 fomular 1 既插头DP学习笔记
  4. Atcoder Contest 015 E
  5. 谷歌浏览器chrome设置特定网页使用Https(ssl)访问
  6. windows service 调试
  7. 给力Mac下的思维整理软件,思维导图软件合辑
  8. wmware下载地址
  9. Linux执行命令unable to create new native thread问题
  10. 关于文本处理sort-cut-wc详解