C_and_CPP 板


LINE

有监於许多板友没有进入状况,我快速科普一下 structure alignment。 毕竟我不是C/C++的专家,以下内容很可能有疏漏之处,还请各位小心服用。 ----- [structure alignment] C语言自古以来就有的经典性质! struct里面的资料,在记忆体当中,必定按照顺序排列,而且必定相邻排列。 struct Node { char a; short b; int c; }; 以上例来说,记忆体的配置一定是abc。不是cba,也不是acb,不会换位置。 这个性质的好处: 1. 使用指标,使用加法,可以指到abc。 2. memcpy可以一口气拷贝一整个struct。 3. 在记忆体中是连续的,方便debug。 ----- [structure padding] abc中间可能有间隙。 char: 1 byte  short: 2 byte int: 4 byte  (或者 int8_t int16_t int32_t) char可以配置在记忆体任何地方。 short的起始位置只能配置在0 2 4 6 8... int的起始位置只能配置在0 4 8 12 16... 所以 abc 中间其实有间隙。 a 後面会自动补上 1 byte ,以便让 b 的起始位置变得正确。 sizeof(Node) 是 1+(1)+2+4 = 8 而不是 1+2+4 = 7 ----- [structure packing] 我们可以强制让 abc 紧密排列,甚至重新指定 abc 个别的 bit 数量。 这里就不展开了。 ----- [struct = class] C++当中,这两个关键字是等价的。 只有一点差别:struct预设public,class预设private。 也请注意:C的struct、C++的struct,是两码子事。C++的struct比较强大。 ----- [standard-layout type] C++11的新性质。 当一个物件型态符合此属性,就具备C语言 structure alignment 的性质。 is_standard_layout<T>() 可以用来判断一个物件型态是不是 standard-layout type。 #include <iostream> struct RGB { unsigned char r; unsigned char g; unsigned char b; }; struct RGBA : RGB { unsigned char a; }; int main() { std::cout << std::boolalpha; std::cout << std::is_standard_layout<RGB>::value << '\n'; // true std::cout << std::is_standard_layout<RGBA>::value << '\n'; // false return 0; } 我说能不能通融一下,希望C++20可以把这个改成true。 XD ----- [alignment requirement] C++11的新性质。 alignas 可以重新指定 abc 的bit数量。 alignof 可以计算 abc 的配置位置。 这里就不展开了。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.37.97 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1576366351.A.A4A.html ※ 编辑: DJWS (36.225.37.97 台湾), 12/15/2019 07:45:48 ※ 编辑: DJWS (36.225.37.97 台湾), 12/15/2019 07:49:41
1F:推 Bencrie: 大家都知道这些,但是都没有进入状况 XD 12/15 12:36
2F:→ loveme00835: 结果有进入状况的原 PO 还少最重要的关键字: 12/15 16:40
3F:→ loveme00835: layout-compatible. 颇呵 12/15 16:41
4F:→ loveme00835: 全世界你最懂 12/15 16:42
5F:→ wtchen: 板上神人其实很多,一山还有一山高,原Po注意一下语气 12/15 17:44
6F:推 oToToT: 原po不就常常因为这样,然後... 12/15 18:41
7F:→ DJWS: layout-compatible我真不会 各位可以详细说说吗? 12/15 19:49
8F:嘘 KevinR: 大家真客气 12/17 10:23
其实我不喜欢钓鱼。为了避免更多无辜民众上钩,我还是澄清一下吧。 [问题] 因数分解问题请教 https://www.pttweb.cc/bbs/C_and_CPP/M.1359553751.A.294 loveme00835 之前发现那个站很多都是演算法笔记抄来的就不逛了 01/30 22:10, 3F DJWS 三楼可能搞反了 演算法笔记还没出现以前 这个站就已经在了 01/31 13:16, 10F loveme00835 我指的是内容, 而且是指 C/C++ 的程式码 01/31 14:06, 11F 此人以前就会凭空诬陷别人,被指正还不认错,继续鬼扯。 一句话挑战台湾两个知名教学网站,根本战神,板主你确定要挺这种人? 置底闲聊文(2016/7/2- https://www.pttweb.cc/bbs/C_and_CPP/M.1467445964.A.4DF 近期活动: - DJWS大神降临!快带老婆来朝圣 Richun 老婆? 07/02 19:38, 2F wtchen 再怎麽不济也有双手吧 07/02 20:16, 3F 板主你所谓的语气好,就是问候人家老婆或者双手? 而我就对方言论提出我的疑问、提出我的见解,就是语气不好? 我从头到尾只有严厉批评s板友,因为他从struct alignment扯到OO去。 至於其他板友,我都相当尊重,有问必答,我自认说话没有语气不好,请板主明监。 ※ 编辑: DJWS (114.45.86.151 台湾), 12/17/2019 18:54:21
9F:推 xam: 路人觉得态度很差是真的啊 12/17 21:13
10F:嘘 chuegou: 12/17 22:26
11F:推 ko27tye: 你不是在软工板酸cpp板程度吗 我还有点印象 12/17 22:39
12F:嘘 kobe8112: 路人觉得态度差+1 12/17 23:27
13F:→ kobe8112: 举的案例逻辑一蹋糊涂 12/17 23:30
14F:→ kobe8112: 要呛人就呛到底,嘴巴不饶人又不敢承认,这我不行 12/17 23:34
15F:→ kobe8112: https://i.imgur.com/xCs1ROV.png 12/17 23:34
16F:→ kobe8112: 对了,我也只是严厉批评,因为你从程式扯到其他旧文去 12/17 23:37
17F:推 tomsawyer: 其实我还是看不懂原文在说什麽QQ 12/18 00:04
18F:嘘 wtchen: 那篇本来就是闲聊文,闲聊就是给人这样用的。老兄你口气不 12/18 05:34
19F:嘘 wtchen: 改善的话我们就板规处置 12/18 05:34
20F:嘘 ggBird: 杀洨 12/18 06:59
21F:推 CoNsTaR: 我从一开始就看这串的,平心而论真的看不出原Po尊重在哪 12/18 12:53
22F:→ CoNsTaR: 只看到明明是来问问题的又爱跟人争输赢 12/18 12:53
23F:→ CoNsTaR: 我还看到版友给的建议你不只不懂得利用,还说人家是上古 12/18 12:53
24F:→ CoNsTaR: 时代、不切实际 = = 12/18 12:53
25F:→ CoNsTaR: 看到真的超级傻眼好吗 12/18 12:53
26F:嘘 F04E: 蛤?? 12/18 18:24
27F:推 Bencrie: 我觉得是中文不好的问题。问问题问成那样再批评人家离题 12/19 13:00
28F:推 Bencrie: 然後不要觉得这里没人看 Soft_job 好吗 XD 12/19 13:07
29F:→ Bencrie: 亏我还有在阿轮的文底下推文 12/19 13:09
30F:推 s0914714: 为啥你觉得版友不懂这些XD 12/19 14:50
31F:推 CaptainH: 各位给点尊重好吗?这位是演算法笔记的作者,竞赛的无 12/20 05:51
32F:→ CaptainH: 冕王者 12/20 05:51
33F:→ pttworld: 一直活在自己的象牙塔里,真实世界的可怜人。 01/03 17:35
34F:推 kingofsdtw: 写c++还用struct? ... 03/19 23:28
35F:→ kingofsdtw: 面试看到这问题都发笑 03/19 23:29







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP