博客
关于我
C结构体内存对齐细节
阅读量:226 次
发布时间:2019-03-01

本文共 483 字,大约阅读时间需要 1 分钟。

内存对齐的细节和编译器实现有关,一般有三个原则:

1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;

2. 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如果有需要,编译器会在成员之间加上填充字节;

3. 结构体的总大小为结构体中最宽基本类型成员大小的整数倍,如果有需要,编译器会在最末一个成员之后加上填充字节。

ex :

struct  st{        uint16_t id; //2字节宽    uint32_t value; //4字节宽    uint64_t time; //8字节宽}

内存空间占用情况: 共占用16字节空间宽度


ex :

struct Date{    char a; //1字节    int b; //4字节    int64_t c; //8字节    char d; //1字节};Data data[2][10];

内存空间占用情况: 共占用16字节空间宽度

如果Data首地址为X,则data[1][5].c的地址是X+368.

 

参考文献:

【1】程序员面试笔试真题与解析

转载地址:http://zrzt.baihongyu.com/

你可能感兴趣的文章
MySQL索引原理以及查询优化
查看>>
Mysql索引合并(index merge)导致的死锁问题
查看>>
mysql索引底层数据结构和算法
查看>>
Mysql索引底层结构的分析
查看>>
MySQL索引底层:B+树详解
查看>>
Mysql索引总结
查看>>
mysql索引最左匹配原则理解以及常见的sql使用的索引情况的实测
查看>>
Mysql索引类型
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
mysql索引能重复吗_mysql “索引”能重复吗?“唯一索引”与“索引”区别是什么?...
查看>>
Mysql索引(4):索引语法
查看>>
mysql级联删除_Mysql笔记系列,DQL基础复习,Mysql的约束与范式
查看>>
mysql经常使用命令
查看>>
MySQL经常使用技巧
查看>>
mysql给账号授权相关功能 | 表、视图等
查看>>
MySQL缓存使用率超过80%的解决方法
查看>>
Mysql缓存调优的基本知识(附Demo)
查看>>
mysql网站打开慢问题排查&数据库优化
查看>>
mysql网络部分代码
查看>>
mysql联合索引的最左前缀匹配原则
查看>>