Tencent后台服务器开发有一道题是计算一个结构体的sizeof的大小:

struct strData

{

int m_Int;

char m_Char;

short m_Short;

char m_Flag;

}

系统为32位的Unix机器,请问sizeof(strData)的值是多少?

在32位系统中,int类型为4个字节,char类型为1个字节,short为2个字节,所以理论上上述结构体占用的空间总共为8个字节;

但是,内存存放数据时如果各种类型合理对齐时,cpu访问数据的效率就比较高;比如某些平台上每次读取数据都是从偶地址开始,如果数据字节对齐的话,可能只需要一个cpu周期就可以取得数据。

因此,假设存储地址从0x0000开始,则上述结构体中,m_Int是0-3,m_Char是4,m_short是6-7,m_Flag是8,共9个字节,鉴于4字节对齐,所以还需要额外的3字节,因此sizeof此结构体的大小为12个字节。

如果改成

struct strData

{

short m_Short;

char m_Char;

char m_Flag;

int m_Int;

}

这样的话就是8个字节了。

注意一定是偶数地址对齐,而且整个结构体的大小也必须是结构体最大对齐值的整数倍。

当然了,如果是单字节对齐就是理想的内存占用。

这也算是最基本的问题了,如果这也答错了,那被鄙视也是应该的了。

希望能知耻而后勇。

参考链接:

为什么需要字节对齐?

http://blog.csdn.net/zkf11387/article/details/7662450

详解结构体、类等内存字节对齐

http://zhangyu.blog.51cto.com/197148/673792/

32位与64位下各类型长度对比

http://blog.csdn.net/sky_qing/article/details/11650497/

【2017-07-01】Linux应用开发工程师面试问题记录之二:关于结构体的大小及内存对齐问题的更多相关文章

  1. 开发工程师面试的秘密( 整理自 Export C Programming )

    开发工程师面试的秘密 因为打算转战linux平台,所以一直在配置自己喜欢的linux操作系统.同时在看那本<C 专家编程>,这本书主要是针对ANSI C 介绍的,所以和Linux(Unix ...

  2. 嵌入式系统Linux内核开发工程师必须掌握的三十道题(转)

    嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核 ...

  3. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  4. 珍藏版 Python 开发工程师面试试题

    珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...

  5. 大厂0距离:网易 Linux 运维工程师面试真题,内含答案

    作为 Linux 运维工程师,进入大公司是开启职业新起点的关键,今天马哥 linux 运维及云计算智囊团的小伙伴特别分享了其在网易面试 Linux 运维及云计算工程师的题目和经历,希望对广大 Linu ...

  6. 嵌入式Linux内核开发工程师必须掌握的三十道题

    如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师. 1. Linux中主要有哪几种内核锁?(进程同步与互斥) (1)自旋锁:非睡眠锁 (2)信号量: ...

  7. Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

    倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...

  8. JAVA开发工程师面试(1)

    我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...

  9. Linux运维工程师面试

    一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?   2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? ...

随机推荐

  1. AngularJS页面【uib-dropdown】控件在模态窗口(弹出窗)中无法使用问题

    如果你的下拉框中有属性 dropdown-append-to-body 将它去掉,即可正常使用该插件. <div class="btn-group dropdown" uib ...

  2. POJ1769(线段树+DP)

    飞翔 题意 : 给定一个区间长度 n ,接下来给出 m 个子区间,要求最少选出多少个区间才能使得 1~n 这个区间被所选的所有子区间覆盖 分析: 首先是动态规划,dp[i]表示把最大值从1位置搞到第i ...

  3. Codeforces Round #529 (Div. 3) C. Powers Of Two

    http://codeforces.com/contest/1095/problem/C 题意:给n找出k个2的幂,加起来正好等于n.例如 9,4:9 = 1 + 2 + 2 + 4 思路:首先任何数 ...

  4. 杭电ACM hdu 1398 Square Coins

    Problem Description People in Silverland use square coins. Not only they have square shapes but also ...

  5. haproxy安装:

    haproxy安装: tar zxf haproxy-1.4.24.tar.gz            ##解压 yum install rpm-build -y                   ...

  6. kohana reading session data error(session_start)引起的错误

    在项目中碰到一个很奇怪的问题,同一个网站目录下两个项目,手机端访问从A项目切换到B项目,总是报错,session_start抛错,后来排查了很久,终于发现是存储session的时候直接存储的对象,导致 ...

  7. Docker & ASP.NET Core 教程

    第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 第五篇: Docker & ASP.NET Core (5):Docker Compose AS ...

  8. ssh两台主机建立信任关系

    A主机(10.104.11.107)   B主机(10.104.11.128) A: ssh-keygen -t rsa [root@H0f .ssh]# ssh-keygen -t rsa Gene ...

  9. 转发 django 初探

    https://www.cnblogs.com/franknihao/p/7682914.html https://blog.csdn.net/tang_jin2015/article/details ...

  10. lscons 命令,设置当前控制台设备的名称写至标准输出

    用途 将当前控制台设备的名称写至标准输出. 语法 lscons [ -s ] [ -a | -O ] lscons -b [ -s ] [ -a | -O ] lscons -d [ -s ] 描述 ...