C-ode
文章平均质量分 91
Jack_Kilby
嵌入式钢铁侠怀胎中。
展开
-
【内存对齐】第七篇·嵌套构造类型的对齐规则{共用体}
上一篇:【内存对齐】第五篇·嵌套构造类型的对齐规则{数组} 结构体{ 共用体 }数组{ 共用体 }共用体 { 共用体 }结构体{ 共用体 }当结构体中包含共用体的时候,可以猜测,Size 应该是先计算共用体整体的Size,再将其作为一个成员放到结构体中按照结构体的方式计算 Size。共用体的 Size=3 可能会是个特殊的例子,我们来验证下:struct test_st{ char meat; union test_u{ char grass[3];原创 2021-08-28 22:43:07 · 338 阅读 · 0 评论 -
【内存对齐】第六篇·嵌套构造类型的对齐规则{数组}
上一篇:【内存对齐】第五篇·嵌套构造类型的对齐规则{结构体} 结构体{ 数组 }数组 { 数组 } = 多维数组共用体 { 数组 }结构体{ 数组 }对于结构体中包含数组这种情况,还是比较常见的。按照数组的规则,和结构体嵌套结构体的规则,可以猜测:相当于将数组打开为多个同样大小的结构体成员。验证:struct test_st{char meat[3];}test; Size: 3 Address: 0x00000001004071a4struct test_st{char meat原创 2021-08-06 16:01:13 · 467 阅读 · 0 评论 -
【内存对齐】第五篇·嵌套构造类型的对齐规则{结构体}
上一篇:【内存对齐】第四篇·Array、Union内存对齐的规律与原则首先,定义规则的人应该希望:前面各种构造类型的规则,如果可以递归,就可以用于嵌套的构造类型。所以我们只需要猜想并进行验证即可。根据构造类型的排列组合,我们可以将嵌套方式分为如下几种:外层类型内层类型数组结构体共用体结构体结构体结构体结构体数组数组数组共用体数组结构体共用体数组共用体共用体共用体本篇介绍前3种的对齐规则。 数组 { 结构体 }原创 2021-07-20 22:35:30 · 735 阅读 · 0 评论 -
【内存对齐】第四篇·Array、Union内存对齐的规律与原则
上一篇:【内存对齐】第三篇·显式干预对齐的三种方法除了 struct,其他构造类型包括 union,array。我们通过前面的讨论,已经基本理清了简单结构体的内存对齐规则。 下面将探讨 “union 联合体”,“array 数组” 的对齐规则。 Array 数组的对齐规则Union联合体/共用体 的对齐规则Array 数组的对齐规则先来讨论下 array 数组类型 的对齐规则。数组本身就是由很多相同类型的数据类型组成的,所以有:a. 其元素的宽度应该是 2 的倍数(不算最小的char[1]);原创 2021-06-22 22:42:18 · 625 阅读 · 0 评论 -
【内存对齐】第三篇·显式干预对齐的三种方法
介绍3种方法,显式干预对齐:方法一 预编译 #pragma pack(n)方法二 __ attribute__ 参数方法三 编译选项 -fpack-struct。原创 2021-04-15 22:35:09 · 355 阅读 · 0 评论 -
【内存对齐】第二篇·结构体内存对齐的规律与原则
C刺五步蛇第一步 提出问题第二步 编程实现第三步 探究规律Step1. 结构体中只有一个成员Step2. 结构体中有2个成员Step3. 结构体中有3个及以上成员Step3-1. 结构体中有多个 同类型 成员Step3-2. 结构体中有多个 不同类型 成员第四步 得到结论第五步 求证与验证第一步 提出问题首先,我们确定我们这一阶段的目标:结构体变量的首地址是如何得到的?探究结构体变量的大小是如何确定的?第二步 编程实现为了探究上面提出的两个问题,我们先尝试将结构体定义为全局变量(局部变量可能原创 2021-04-09 23:18:34 · 530 阅读 · 0 评论 -
【内存对齐】第一篇·一道 sizeof 的 面试笔试题 带来的深刻反思
去面试的时候笔试遇到的一个问题,挺基础的,却一知半解。于是决定,边测试边整理,深入地探究一下“内存对齐”这个问题。先给出正确答案:在32-bit编程环境下,char占用1字节,short占用2字节,int占用4字节。sizeof(name1) = 8,sizeof(name2) = 12。最基本的参考,应该是来自于《C Primer Plus》,查找自己的C语言读书笔记,找到这么一段摘录:字节对齐三条准则:a) 结构体变量的首地址可以被其最宽基本类型成员的大小整除。原创 2021-04-07 12:01:42 · 406 阅读 · 6 评论 -
[日常刷题] C语言:在 平方和 算例中用浮点型还是整形?
原文(自己的Draft)标题:一个double引发的long (漫长)思考前言:先说说刷题。我的好朋友去了某知名高薪大企业,跟我闲聊第一句话就是“你日常刷题么?”他说,这个大企,除了工作任务,还要日常刷题。我说:“我要去这个大企,是不是现在就得刷起来?”,他说,去了再刷也不迟。我内心:虽然从不刷题,但我日常随便写写代码也算是刷题吧,练的是…手速,也是程序员引以为豪常拿出来攀比的一个技能呢,哈哈...原创 2020-05-01 16:47:54 · 605 阅读 · 0 评论 -
【C字符串处理】【参数传递】 一次又傻又颇有成就感的 服务器自动编译 参数传递 调试经历
目录故事背景需求实现 - 误以为是字符串Step 1. “数值+字符”-->“数值+字符串”Step 2. “字符串指针报错”-->暴力制造“整形数组”Step 3. "全局初始化"--> “使用前重赋值”(重要转折)Step 4. "strcpy/strncpy"赋值(重要实现方法)step 5. 整理,关联服务器参数step 6. 传递空 != 传递0实现 - 将没有类型的宏变为字符串Step 1. 讨论,定方案Step 2. C语言#的妙用Step 3. 知其然,更要知其所以然总结原创 2020-07-23 08:40:40 · 974 阅读 · 2 评论