社区
新手乐园
帖子详情
请问4字节对齐和1字节对齐是什么意思?具体在哪里应用不同?新手请各位大虾赐教
ccc2006
2006-03-28 12:09:38
用上
...全文
2161
9
打赏
收藏
请问4字节对齐和1字节对齐是什么意思?具体在哪里应用不同?新手请各位大虾赐教
用上
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iolia
2006-03-30
打赏
举报
回复
1
可以这样看,n字节对齐就是每个成员的存放地址偏移量应该是0,n,2n...等n的整数倍,如果不是的话,就要空出相应的字节出来,比如此例4字节对齐
char tName[20] 占用0-19这20个字节, char tAttribute[20]从20开始,是4的整数倍,占用20-39这20字节,同理char tAttribute[10]占用40-49这10个字节,但接下来的字节偏移量是50,不是4的整数倍,故就得空出2个字节,让tuple *next从偏移量为52的地方开始存放
postren
2006-03-30
打赏
举报
回复
VC中可以用 #pragma pack(8)来指定对齐方式为8
fish_kun
2006-03-30
打赏
举报
回复
我最先看到这个的是朗讯的一道笔试题,原理实际上是机器数为32,在编译器优化时,需要做对齐处理。
typedef struct
{
char a;
int b;
char c;
char d;
int e;
char f;
} data; data 在编译后为:a 占4位,b占4位,c占4位,d占4位,e占4位,f占4位。
typedef struct
{
char a;
char c;
char d;
char f;
int b;
int e;
} data; 在编译后acdf占4位,b,e各占4位。
当然,也可以用不对齐的命令,让编译器不要做这些。
总的说来,编译器优化需要将各种类型对齐成机器字(x86结构为4字节)。
这个问题一般是对系统要求比较高,比如说和硬件相关的编码(好的结构可以节约存储空间),一般的情况下,除了面试,笔试,也不怎么管。至于这是lucent的笔试题,估计就是这些人需要做通信相关硬件的编码搞的,呵呵。
bryanthsu
2006-03-30
打赏
举报
回复
学习
ccc2006
2006-03-28
打赏
举报
回复
能否举个实例说说
class tuple
{
public:
char tName[20];
char tAttribute[20];
char tAttrtype[10];
tuple *next;
}
这个对象是不是在内存中占的字节数应该是根据字节对齐方式有所不同,在1/4/8字节对齐方式下,这个对象分别占多少字节呢
积木
2006-03-28
打赏
举报
回复
cpu在一个周期内只能处理一个单位的数据,这个单位是根据cpu能处理字的长度不同而不同。
所以如果打算让cpu物尽其用。那就尽量使用合适的字节对其。
ykzhujiang
2006-03-28
打赏
举报
回复
在struct等结构的对齐上面应用
4字节对齐的意思是4字节为一个对齐单位
1字节对齐的意思就是连续存放
duanliyu
2006-03-28
打赏
举报
回复
学习
yinqing_yx
2006-03-28
打赏
举报
回复
引用论坛上某网友的帖子解释:共同学习~~~~~~~~~~
复合数据类型,如union,struct,class的对齐方式为成员中对齐方式最大的成员的对齐方式。
顺便提一下CPU对界问题,32的C++采用8位对界来提高运行速度,所以编译器会尽量把数据放在它的对界上以提高内存命中率。对界是可以更改的,使用#pragma pack(x)宏可以改变编译器的对界方式,默认是8。C++固有类型的对界取编译器对界方式与自身大小中较小的一个。例如,指定编译器按2对界,int类型的大小是4,则int的对界为2和4中较小的2。在默认的对界方式下,因为几乎所有的数据类型都不大于默认的对界方式8(除了long double),所以所有的固有类型的对界方式可以认为就是类型自身的大小。
SpringBoot2整合Vue3+ArcoDesign字节跳动Vue
课程简介:该互联网实战项目是基于腾讯开源Tdesign产品框架,前后端分离,开发项目实战,SpringBoot+SpringSecurity+Mybatisplus+MySQL+Knife4j中后台项目产品实战,包括图形展示、权限管理、用户管理等功能。【后端】Spring Boot2 框架 开发的一站式解决方案Spring Security5 认证和授权框架MyBatisPlus3.3.1 基于 MyBatis 框架的快速研发框架MyBatisCode工具生成 MyBatis 相关代码Jackson提供了处理 JSON 数据的工具Lombok简化对象封装工具 Druid 数据库连接池 【前端技术】Vue3 互联网最火的前端框架Vue Router路由框架Vuex全局状态管理框架Axios前端 HTTP 框架Arco Design 字节跳动前端模板 ArcoDesign 主要服务于字节跳动旗下中后台产品的体验设计和技术实现,主要由UED设计和开发同学共同构建及维护。Arco Design 是一套企业级 UI 解决方案,拥有系统的设计规范和资源,依据此规范提供了覆盖 React、Vue、Mobile 的原子组件。ArcoDesign 提供的能力完善的基础组件基于 Arco Design 设计规范,Arco 提供了 67 个基础组件。同时,Arco 在这些基础组件的设计上,也开放了细粒度的配置,方便后续拓展。
C语言面试题大汇总
4. static有什么用途?(
请
至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全
C/C++面试题-3 之1/3
C语言面试题总汇 4. static有什么用途?(
请
至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9. 全局变量和局部变量在内
c面试题
4. static有什么用途?(
请
至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局...
C语言面试题总汇
C语言面试题总汇4. static有什么用途?(
请
至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性9. 全局变量和局
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章