社区
C++ 语言
帖子详情
求助:请帮忙解释对齐的概念
liufangbj
2008-03-10 10:01:31
如题
...全文
76
8
打赏
收藏
求助:请帮忙解释对齐的概念
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bxhj3014
2008-03-10
打赏
举报
回复
C/C++中结构体的存储方式
结构体在内存的存放,遵循两个原则:
1、基本类型对齐原则:存储该类型数据时,以他们的倍数处开始存储。
Char 1
Short 2
Int 4
Long 4
Float 4
Double 4
2、结构体类型对齐原则:
以最大成员类型的对齐方式为准,即当需要增长时,增长最大成员类型所占用的字节数。如果该结构体中只有char型,则每次增加一个字节,若最大为short型,则每次增加2个,若最大的为int,则每次增加4个字节。
例子:vc.net2003下运行结果
#include <iostream>
using namespace std;
struct A
{
char c1;
char c2;
};
/*与A比较发现,当只有char类型时,以1个字节的速度增长*/
struct B
{
char c1;
char c2;
char c3;
};
struct C
{
char c1;
char c2;
short s;
};
/*与C比较发现,当引入short类型后,以2个字节的速度增长*/
struct D
{
char c1;
short s;
char c3;
};
struct E
{
char c;
short s;
int i;
};
/*与E比较发现,当引入int类型后,以4个字节的速度增长*/
struct F
{
char c;
int i;
short s;
};
struct G
{
int i;
char c1;
char c2;
short s;
};
/*与G比较发现,short类型是以2的倍数来对齐的*/
struct H
{
int i;
char c1;
short s;
char c2;
};
int main()
{
cout << "size of A : " << sizeof(A) << endl; /*2字节*/
cout << "size of B : " << sizeof(B) << endl; /*3字节*/
cout << "size of C : " << sizeof(C) << endl; /*4字节*/
cout << "size of D : " << sizeof(D) << endl; /*6字节*/
cout << "size of E : " << sizeof(E) << endl; /*8字节*/
cout << "size of F : " << sizeof(F) << endl; /*12字节*/
cout << "size of G : " << sizeof(G) << endl; /*8字节*/
cout << "size of H : " << sizeof(H) << endl; /*12字节*/
char c;
cin >> c;
return 0;
}
z_kris
2008-03-10
打赏
举报
回复
三种对齐方式:
1、 自然对齐方式(Natural Alignment):与该数据类型的大小相等。
2、 指定对齐方式 :
#pragma pack(8) //指定Align为 8;
#pragma pack() //恢复到原先值
3、 实际对齐方式:
Actual Align = min ( Order Align, Natual Align )
对于复杂数据类型(比如结构等):实际对齐方式是其成员最大的实际对齐方式:
Actual Align = max( Actual align1,2,3,…)
liufangbj
2008-03-10
打赏
举报
回复
谢谢z_kris
z_kris
2008-03-10
打赏
举报
回复
test2是默认的32位系统下,所以要为4的倍数
但是 如果结构体中最小的那个变量所占空间为N BYTE,且N>4 时,结构体的大小就必须补足为N的倍数
z_kris
2008-03-10
打赏
举报
回复
主要针对字节对齐问题(通常通信中传输struct会涉及长度问题)
#pragma pack(1)
struct test1{
int a;
char b;
};
#pragma pack()
struct test2{
int a;
char b;
};
sizeof(test1)为5
sizeof(test2)为8
#pragma pack(n)
将存储粒度改为n字节
liufangbj
2008-03-10
打赏
举报
回复
俺的公司除了csdn等等能访问,其他的都上不了
z_kris
2008-03-10
打赏
举报
回复
内存对齐?网上很多啊
总的来说就是和存储粒度相关 理解了这个,其他的就不难了
liufangbj
2008-03-10
打赏
举报
回复
感谢楼上的^^
大模型到底在
对齐
什么?为什么需要
对齐
大模型
对齐
指的是将大模型的行为规范与人类群体的价值观、意图及场景规范保持一致的过程。本质是在模型能力与人类期望之间建立可靠映射。所以,是大模型是在跟人类的一些“偏好”
对齐
。为什么需要
对齐
?显而易见,刚训练出来的大模型落地解决问题的时候不符合人类预期,所以需要
对齐
。
java函数是什么意思啊_[
求助
]
请
问setHorizontalAlignment是什么意思!什么函数来
[
求助
]
请
问setHorizontalAlignment是什么意思!什么函数来tf=new JTextField();tf.setEditable(false);tf.setHorizontalAlignment(JTextField.RIGHT)上面代码是在计算器中显示出数据的代码
请
问setHorizontalAlignment是什么意思!什么函数来!~
请
解释
下!~搜索更多相关的解决方案:函数-...
从零开始一起学习SLAM | 用四元数插值来
对齐
IMU和图像帧
视觉 Vs. IMU 小白:师兄,好久没见到你了啊,我最近在看IMU(Inertial Measurement Unit,惯性导航单元)相关的东西,正好有问题
求助
啊 师兄:又遇到啥问题啦? 小白:是这样的,现在VIO(Visual-Inertial Odometry,视觉惯性里程计)很火,我就想试试把IMU测量的信息和图像进行简单的融合,这样利用IMU测量的先验信息,可以给图像一个比较好的初值。。...
结构体指针memcpy出错_
求助
.把数据memcpy到结构体,要怎么对应?
baidu的需要的可以看看在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。例如,下面的结构各成员空间分配情况:st...
FUTURE POLICE模型
解释
性研究:可视化注意力机制聚焦的语音关键片段
本文介绍了如何在星图GPU平台上自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,以进行语音模型的可
解释
性研究。通过可视化模型的注意力机制,可以清晰地识别出其在处理语音时聚焦的关键片段,例如在报警录音中精准定位“钱包”、“地点”等核心词汇的时间位置,从而提升模型决策的透明度和调试效率。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章