偏底层(深入)的一些概念整理

来源:互联网 发布:圣马可吉他怎么样知乎 编辑:程序博客网 时间:2024/06/01 07:33

1. 大端模式和小段模式

key:网络通信、字节序、底层驱动开发、Big-Endian & Little-Endian

  • 大端模式和小端模式

2. 字节对齐

key:padding

  • 【c语言字节对齐】
  • 【结构体字节对齐和位域对齐】

3. 编码

简单来说,GBK、GB2312、Unicode这些是字符编码格式,是字符对应的编码值,根据编码表可以找到对应字符的编码值;而UTF_8、UTF_16这些是编码值的存储方式(几个字符存储,大小端字节序),其中UTF_8是变长格式存储方式即不同的字符需要的存储空间大小可能不同,而UTF_16是2字节存储。GBK和GB2312是2字节存储一个汉字,GB2312仅包含简体字,而GBK包含了繁体字;UTF_8因为是变长格式存储,汉字以3字节存储较多。
  • 【Unicode、GBK、UTF-8区别】
  • 【为啥需要Unicode】
  • 【GBK、GB2312、Big5、Unicode、UTF_8、UTF_16区别】

4. 带缓冲和不带缓冲的IO

  • 带缓存的文件操作是标准C库的实现,第一次调用带缓存的文件操作函数时标准库会自动分配内存并且读出一段固定大小的内容存储在缓存中。标准IO库提供缓冲的目的是尽可能减少使用read和write调用的次数,降低执行IO的时间,它提供三种类型的缓冲:全缓冲、行缓冲、不带缓冲
  • 不带缓存的文件操作通常都是系统提供的系统调用,更加低级,直接从硬盘中读取和写入文件,由于IO瓶颈的原因,速度并不如意,而且原子操作需要程序员自己保证,但使用得当的话效率并不差。另外标准库中的带缓存文件IO是调用系统提供的不带缓存IO实现的
链接:
  • 【不带缓冲IO和带缓冲IO】 (很好的解释)
  • 【缓冲IO和非缓冲IO的区别】(直观的例子1!!)
摘录可以看出标准IO会缓冲4096Bytes的数据,当达到这么多数据时才会进行实际的磁盘写入,而系统调用write则是直接写入,不进行缓冲。
  • (例子2)
0 0