社区
C++ 语言
帖子详情
求助:请帮忙解释对齐的概念
liufangbj
2008-03-10 10:01:31
如题
...全文
77
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
打赏
举报
回复
感谢楼上的^^
大模型到底在
对齐
什么?为什么需要
对齐
本文探讨大模型
对齐
相关问题。大模型
对齐
是将其行为规范与人类价值观、意图及场景规范保持一致,本质是建立模型能力与人类期望的映射。因刚训练的模型不符合人类预期,所以需
对齐
。实现
对齐
可根据场景和目标进行知识注入,如SFT、RLHF等方法。
java函数是什么意思啊_[
求助
]
请
问setHorizontalAlignment是什么意思!什么函数来
本文解答了关于 Java Swing 中 JTextField 的 setHorizontalAlignment 方法的疑问,介绍了如何设置文本的水平
对齐
方式,包括左
对齐
、居中
对齐
、右
对齐
等选项,并通过示例代码说明了该方法的使用方法。
从零开始一起学习SLAM | 用四元数插值来
对齐
IMU和图像帧
本文讲述了在视觉惯性里程计(VIO)中,如何利用四元数插值来
对齐
高频率的IMU数据和低频率的图像帧。作者通过讨论四元数的优势,
解释
了为何选择四元数,并介绍了插值的基本
概念
,如线性插值和球面线性插值(Slerp)。文中强调了Slerp在保持恒定角速度方面的优点,适合用于四元数插值,同时提到了编程实现Slerp插值时需要注意的事项。
结构体指针memcpy出错_
求助
.把数据memcpy到结构体,要怎么对应?
本文详细介绍了C语言中结构体的内存
对齐
规则,包括成员变量的自然对界条件、内存填充以及如何通过#pragma pack和__attribute__调整
对齐
方式。通过实例
解释
了结构体内存布局,帮助理解编译器如何优化存储空间的使用。
FUTURE POLICE模型
解释
性研究:可视化注意力机制聚焦的语音关键片段
本文围绕FUTURE POLICE语音识别模型展开可
解释
性研究,重点提取并可视化其Transformer架构中的多头自注意力权重;通过热力图呈现模型在语音时间序列上的聚焦分布,并将其映射至真实音频时间轴,实现‘波形-文本-注意力’三维
对齐
;该方法支撑错误归因分析(如关键词误识)、模型调试及鲁棒性优化。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章