社区
C++ 语言
帖子详情
求助:请帮忙解释对齐的概念
liufangbj
2008-03-10 10:01:31
如题
...全文
52
8
打赏
收藏
求助:请帮忙解释对齐的概念
如题
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
感谢楼上的^^
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分? 2:100分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望高手
帮忙
! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,常用软件、游戏、精美图库下载,希望对网友有帮助!顺便散分! 6:VBA
请
教怎
题解 | #牛牛的计划# 判断法和数值法两种方法解析
得物24届秋招内推!投的it岗,直接去面hr,他上来就问我为什么四级过了不写在简历上,为什么写一大坨(项目,技能啥的)不写学校的经历哥们,你出门看看有几个没考过四级,还有臭二本的校。【一面】时间:9月12日,25分钟内容:1、自我介绍2、八股:go问了map、interface、channel,linux问了查看进程命令,mysql问了索引。#offer比较,希望大佬们给个意见# #投票# 小弟西工大硕士,航空工程专业,目前有两个offer,不知道怎么抉择,想看看各位牛友们的意见1.成飞132厂:1。
ChatGPT 解密
ChatGPT:晚会晚宴的一些素食主菜选项可能包括:● 用藜麦和时令蔬菜填充的灯笼椒● 配面食的茄子帕尔玛干酪● 香煎牛肝菌配香醋酱和烤蔬菜● 素食炒菜配豆腐,搭配米饭过程提示如何:为了尽可能使客人到达尽可能顺利,Emily 想了解最佳的入场流程实践。这些提示可以帮助用户了解特定想法、产品或
概念
的优缺点。ChatGPT:在为老年和年轻观众创建营养和健康内容时,
请
考虑以下因素:● 年龄特定的营养需求:老年人通常需要更多某些营养素,如钙和维生素 D,而年轻人可能有不同的营养重点,如蛋白质用于肌肉生长。
计算机网络知识点大全!(太详细了)
????????关注后回复“进群”,拉你进程序员交流群????????作者:CSDN-mcyuuji 原文链接: https://blog.csdn.net/mcyuuji/article/details/113794535第一章 概述1.基本
概念
- 链路,结点,协议和服务,实体和对等实体,各层PDU链路:连接结点的称为链路,可以是铜缆,光纤,卫星等;结点:可以是计算机,集线器,交换机或路由器等;协议:两个对等实体...
用户意图理解在AI原生应用中的最新研究进展
当你对智能音箱说"今晚想吃辣的",它能立刻推荐川菜馆;当你在购物APP输入"送闺蜜的生日礼物",页面自动跳出首饰和美妆推荐——这些"懂你"的体验背后,都依赖一项核心技术:用户意图理解。本文将聚焦AI原生应用(完全基于AI能力构建的新一代应用)中的用户意图理解技术,覆盖基础
概念
、最新算法、实战案例及未来趋势。本文将从"为什么需要意图理解"的生活故事切入,逐步拆解核心
概念
→技术原理→实战案例→未来方向,最后通过思考题引导读者深度思考。用户意图理解:AI的"翻译官",将模糊表达转为明确指令。AI原生应用。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章