【答疑释惑】C语言里面结构体大小统计方法

之前说过一个关于结构体在内存中所占字节数的问题,我们知道结构体长度的计算并不是所有成员长度的相加,而是因为编译器优化会对其进行对齐,这样会优化访问速度等。

那么还有一种情况,因为特殊原因,需要结构体的长度按字节对齐,结构体的长度就是所有成员长度的和。尤其是嵌入式编程以及网络编程中好多地方都有这样的要求,这时候怎么做呢?

这个时候如果是在linux下,就需要用到GNU C 的__attribute__ 机制。

比如:

struct A {

int i;

char c;

} __attribute__((packed));

那么这个结构体的长度就是sizeof(int)+sizeof(c)的大小。

类似的在windows下也有相应的机制来实现。更详细的介绍可参考网上的文章。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

大数据入门基础系列之详谈Hive的视图

在前面的博文里,我已经介绍了 问:哪个版本开始Hive开始支持视图了? 答:Hive0.6开始 可以先,从MySQL里的视图概念理解入手 视图是由从数据库的基本...

2469
来自专栏编程

Python函数之匿名函数

各位小伙伴,周五快乐! 今天是2017年最后一个工作日,大家都在忙碌些什么呢? 今天我们要讲的是Python函数中的匿名函数 好像函数中的分类及说法很多,但是大...

1926
来自专栏章鱼的慢慢技术路

Go语言相关练习_选择题(2)

go语言中字符串是UTF-8编码并存储的,它语言不定长的字节,所以它不支持下标操作,因为没一个下标操作代表的是固定长度的字节,所以不能对字符串中某个字符单独赋值...

682
来自专栏Hadoop数据仓库

HAWQ技术解析(十) —— 过程语言

        HAWQ支持用户自定义函数(user-defined functions,UDF),还支持给HAWQ内部的函数起别名。编写UDF的语言可以是SQ...

3765
来自专栏网络

Bootstrap HTML编码规范

语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法。 嵌套元素应当缩进一次(即两个空格)。 对于属性的定义,确保全部使用...

1679
来自专栏逸鹏说道

Python3 与 C# 基础语法对比(String专栏)

Python3 与 C# 基础语法对比:https://www.cnblogs.com/dotnetcrazy/p/9102030.html

923
来自专栏快乐八哥

JSON入门指南--客户端处理JSON

在传统的Web开发过程中,前端工程师或者后台工程师会在页面上写后台的相关代码,比如在ASP.NET MVC4里面写如下代码: @Html.TextBoxFor(...

1656
来自专栏北京马哥教育

Python 面试问答 Top 25

Python 是一种解释型,交互式,面向对象的高级编程语言。和别的一些使用标点符号的语言不同,Python使用了大量的英语单词作为关键字,因而具有很好的可读性...

3396
来自专栏python学习指南

Python爬虫(十六)_JSON模块与JsonPath

本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation...

2385
来自专栏龙首琴剑庐

Java封装:访问控制

1、类的访问控制符有两种: public, default(默认的,什么都不用写)          default就是包内访问控制符。          当...

2928

扫描关注云+社区