#1、C语言
C语言的的数据类型包括 1、基础类型 2、抽象类型
基础类型中分为固有类型和派生类型。
派生的数据结构中有指针,数组,结构体,函数等类型。这些数据结构的命名方法推荐使用分步定义法。
抽象的数据类型就有:SeT(集合),linear(队列),Tree(树),Graph(图)。相应的存储结构有:顺序存储、链式存储、Hash、索引。
3、控制流
控制流有:1、分支控制流(Branch) 2、循环控制流(Loop)
4、库
C语言中函数库的运用,最实用的就是Stdio标准IO的函数库(standard input output)。包含了参见的使用函数printf();scanf();函数。printf()函数是一个行缓冲函数。
验证代码入如下:
#文件的I/O与系统调用
Linux的内核(什么是Linux的内核)将所有的外部的设备都看作一个文件来操作(一切皆文件),什么意思呢?对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fp ,文件描述符)。
文件I/O :文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write,都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供基本IO服务,与OS绑定,特定于Linux或unix平台。
标准I/O:标准I/O是ANSI建立的一个标准I/O模型,是一个1标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准I/O库处理很多的细节。有:缓存分配,以优化1长度执行I/O等。标准的I/O提供三种类型的缓存。
1)全缓存:当填满标准I/O缓存后才进行实际的I/O操作。
2)、行缓存:当输入或输出中遇到新行符时,标准I/O库执行I/O操作。
3)、不带缓存:标准错误的及时返回。
二者的区别:
文件I/O又称为低级磁盘I/O,遵循POSIX相关标准。任何兼容的POSIX标准的操作系统上都支持文件I/O。
标准I/O被称为高级磁盘I/O,遵循ANSI C相关标准。只要开发系统中有标准I/O库,标准I/O就可以使用。(Linux中使用的是GLIBC,它是标准C的超集。不仅包含ANSI C中定义的函数,还包括POSIX标准中的定义的函数。因此,Linux下既可以使用标准的I/O,也可以使用文件I/O)。
通过文件I/O读写文件时,每次操作都会执行相关系统调用。这样处理的好处是直接读写文件,坏处是频繁的系统调用会增加系统的开销,标准I/O可以看成是在文件I/O的基础上封装了缓冲机制。先读写缓冲区,必要时在访问实际文件,从而减少系统的调用次数。(用户态向内核态的切换非常的消耗性能,一次任务的打开fp,内核态向用户态切换两次)
文件I/O中用文件描述符表述一个打开的文不同类型的件,可以访问不同类型的文件如普通文件、设备文件、和管道文件(什么是管道文件)等。而标准I/O中用FILE(流)表示一个打开的文件,通常只用来访问普通文件。
存储的原理
数据流的流通路径:计算机的计算数据需要从磁盘调度到内存,然后在调度到L2Cache,再到L1Cache,最后进CPU寄存器进行计算。
一、DRAM(动态随机存储存储器)和SRAM(静态随机存取存储器)
DRAM只能将数据保持很短的时间。为了保持数据,DRAM使用电容存储,所以必须隔一段时间刷新(预充电)一次,如果存储单元没有被刷新,存储的信息就会丢失(关机就会丢失数据)。主要用于系统内存
SRAM是一种具有静止存取功能的内存,不需要刷新电路既能保存它内部存储的数据,速度快,但是集成度低。主要用于CPU与主存之间的高速缓存。
二、高速缓冲存储器(Cache)
Cache通常使用昂贵但较快速的SARAM技术(通常认为cache是静态随机存储器)。在计算机存储系统的层次结构中,介于CPU和主存储器之间的高速小容器存储器(主存属于DRAM,比如pc上面的内存条,相对SRAM慢一些)。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。高速缓冲存储器最重要的指标是他的命中率。
Cache作为主存局部区域的副本,用来存放当前活跃的程序和数据,它利用程序运行的局部性,把局部范围的数据从主存复制到Cache中,是CPU直接高速从Cache中读取程序和数据,从而解决CPU速度和主存速度不匹配的问题。
文件内容参考于:
https://blog.csdn.net/big_bit/article/details/51804391
https://blog.csdn.net/qq_20880415/article/details/100526245