美文网首页
C语言进阶

C语言进阶

作者: 山茶小树王勇军 | 来源:发表于2019-10-12 23:26 被阅读0次

字节序

由于历史原因,业界存在两种字节序标准,大字序(大端)和小字序(小端);大字序,高字节存在低地址;小字序,高字节存在高地址。x86是小字序,ARM、MIPS等可配置。网络序为便于阅读是大字序。
htonl(0x123456) 发送消息时需要用htonl宏将数据转成大字序

字节对齐

现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐。

计算机为什么要对齐?

  各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取,其他平台可能没有这种情况。但是最常见的是,如果不按照适合其平台的要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,一个int型(假设为 32位)如果存放在偶地址开始的地方,那么一个读周期就可以读出,而如果存放在奇地址开始的地方,就可能会需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该int数据,显然在读取效率上下降很多。这也是空间和时间的博弈。

基于32位系统,是4字节对齐。对于Intel系列CPU而言,非4字节对齐访问只会造成性能下降;对于MIPS、ARM系统的CPU,要避免跨4字节访问,不对齐的部分会丢弃。
字节对齐问题

函数

函数参数

函数返回值

强制类型转换

强制类型转换允许了不同数据结构指针、变量间的赋值,但这种灵活性也可能埋下隐患大数向小数转换问题,会出现数据丢失、数据访问不完整等情况。例如:
short value = 0x12FF; printf("%d",(char)value); short是两个字节  char是一个字节(范围是-128到127)
void test2(char *p){*p=1;} void test1(){ulong value; test2(&value)} ulong 4字节,只被改写了1个字节,其他字节没有初始化值是未知的。

溢出

字符串

资源释放

内存越界

if语句

高效编码

经典案例

相关文章

  • 一、本文集内容

    学啥 1.计算机基础知识(c语言相关的)2.C语言基础3.C语言进阶4.C语言小项目 学习教材-C语言编程: 一本...

  • C语言进阶

    指针 指针也是变量,在C语言中扮演者重要的角色。有许多使用指针的理由,比如: 字符串(string) 函数里按引用...

  • C语言进阶

    字节序 由于历史原因,业界存在两种字节序标准,大字序(大端)和小字序(小端);大字序,高字节存在低地址;小字序,高...

  • ##规划##

    1, Linux进阶 2,高于入门级的统计学知识,以及一门统计语言,比如 R 3,Python,进阶使用C语言。 ...

  • 目前的计算机能力

    数据结构、操作系统、计算机网络,几乎没有代码量。 需要进阶: c语言-->数据结构c语言实现-->能够用c语言手写...

  • C语言进阶之路:

    《C专家编程》 你是准备进一步提高编程技巧的C语言专家吗?《C专家编程》就是为你准备的,它可以帮助程序员理解高级的...

  • C语言高级进阶

    一、内存 存储数据的最小单元——bit 内存编址的最小单元——byte 内存是线性的 二、补码 一种编码规则 补码...

  • C/C++学习资源(百度云盘链接)

    C/C++学习资源 C语言入门到进阶(13.96G)链接:https://pan.baidu.com/s/1py9...

  • 深入理解C指针

    标签(空格分隔): C语言进阶 本文将会持续更新。。。。 指向指针的指针 在c语言中指针的操作时通过指针变量来实现...

  • 大学本科计算机专业,学完C语言、c++、python,还有必要学

    文章来源:悟空问答丨EXCEL进阶课堂 所学编程语言够不够用? 从你的描述来看,本科学了 C语言、C++、pyth...

网友评论

      本文标题:C语言进阶

      本文链接:https://www.haomeiwen.com/subject/aprfmctx.html