aiamia
put your attention on the right things
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据对齐方式
当定义一个变量时,编译器会根据目标平台的对齐要求,确保变量地址是其数据类型大小的整数倍。例如,在32位系统中,int类型通常需要4字节对齐,其地址必须是4的倍数。结构体的对齐遵循三个核心原则:1)结构体起始地址必须是最宽成员对齐值的倍数;2)每个成员相对于结构体起始地址的偏移量必须是其自身对齐值的倍数;例如,包含char和int的结构体在32位系统中通常会占用8字节(1+3填充+4)对齐方式(Alignment)在计算机科学中指的是数据在内存中的排列规则,要求特定类型的数据必须存储在特定倍数的内存地址上。原创 2025-06-16 14:37:11 · 57 阅读 · 0 评论 -
强制类型转换
在C语言中,强制类型转换操作不会创建新的变量,也不会改变原变量的存储位置或内容。原变量依然存在于原来的内存地址中,其值和存储形式都保持不变。虽然转换后的指针指向相同起始地址,但如果结构体成员的对齐方式不同,可能导致未定义行为。),编译器会生成一个临时值,这个临时值通常存储在寄存器或栈上,但不会影响原变量a的存储位置和值。中,p和&a指向同一个内存地址,但解引用时会按照不同的数据类型解释该地址的内容。这种转换不会分配新的内存空间。当对指针进行强制类型转换时,转换后的指针变量与原指针变量共享相同的地址值。原创 2025-06-16 13:59:29 · 65 阅读 · 0 评论 -
时间差值的计算及无符号数减法的问题
实际上这就是---无符号数的自动取模特性(也称为回绕特性)是计算机底层数学运算的核心机制之一,指当无符号整数的计算结果超出其数据类型所能表示的范围时,结果会自动对类型最大值+1取模,而非引发溢出错误。以前的工作中遇到一个问题,就是我有一个uint32_t的变量,每隔1ms累加一次,我需要利用这个变量来计算某段程序的运行时间。当时看到有个人直接使用的减法计算时间的差值,当时我有一个疑问就是时间溢出了怎么办?当时也是搜索了好多资料,也没有彻底解决,也请教了同事,估计他要么是不懂,要么是装不懂。原创 2025-06-11 14:54:03 · 122 阅读 · 0 评论 -
结构体、结构体指针、传值调用、传址调用
此时结构体内部的指针成员也会被复制,但复制的是指针的值(即地址),而不是指针指向的内容。特别需要注意的是,当结构体包含指针成员时,虽然结构体本身是传值调用,但通过指针成员仍可修改指针指向的内容,这种特殊情况常造成理解上的混淆。虽然结构体参数传递属于传值调用,但由于指针成员存储的是内存地址,在函数内部通过该指针修改其指向的内容时(如*p=new_value),会产生类似传址调用的效果。而传址调用中,形参通过指针间接访问实参的内存空间,函数内对形参的操作实际上是对实参内存的直接修改。原创 2025-06-11 09:30:36 · 106 阅读 · 0 评论 -
大端小端、字节序、位序、intel、MOTORALA一文讲清楚
can总线中位序都是msb,也就是大端,高位先发。大摩小英=大端motorala小端intel。助记符小地低=小地址低字节。原创 2024-12-09 15:53:16 · 437 阅读 · 0 评论 -
补码及存在的意义
最近遇到时间差值的问题,使用减法计算,也可以用abs函数解决,从而又一次接触到补码。补码的问题,微机原理应该学过,无奈都还给老师了,细节也忘记了。原创 2025-01-03 08:36:28 · 235 阅读 · 0 评论 -
C中的-bool-布尔型
自己理解的误区,以偏概全,理解概念不到位。以前的理解是c中没有bool型,忘记从哪里听到的了,C99以及前面的版本早就包含了bool了,只是自己不知道由于是后加的,所以需要包含一个头文件原创 2024-11-19 08:55:15 · 230 阅读 · 0 评论 -
指针及应用
C语言的核心,掌握不好C的精髓就没有get到。原创 2024-11-18 11:57:04 · 166 阅读 · 0 评论 -
enum & typedef enum 应用手册
enum 枚举类型名 {枚举成员1,枚举成员2,...} 枚举变量名;//定义类型时,一起定义变量enum 枚举类型名 {枚举成员1,枚举成员2,...};枚举类型名 枚举变量名;//先定义枚举类型名,再定义枚举变量enum {枚举成员1,枚举成员2,...} 枚举变量名;//省略枚举类型名直接定义枚举变量注意我特意使用了枚举类型名,区别于其后的枚举变量名。原创 2024-11-15 16:05:18 · 485 阅读 · 0 评论