1.文件io和标准io的区别
(1)缓存区别
应用层:标准io带缓存且分为:全缓存,行缓存,无缓存
文件io不带缓存
内核层:标准IO和文件IO都是带缓存的
全缓存:全缓冲指的是系统在填满标准IO缓冲区之后才进行实际的IO操作;注意,对于驻留在磁盘上的文件来说通常是由标准IO库实施全缓冲
行缓存:标准输入(stdin)输出(stdout)都是行缓存,缓存满4096个字节才执行IO操作,而printf是因为程序结束后,系统自动清理缓存的结果.
无缓存:无缓冲指的是标准IO库不对字符进行缓冲存储;注意,标准出错流stderr通常是无缓
冲的。
(2)
标准io是c库里关于io操作的一系列函数.
文件io是系统调用函数
2.静态库和动态库的区别
(1)
静态库:在编译的时候需要库文件,在运行的时候不依赖库文件:
动态库: 在编译的时候不需要库文件,在运行的时候依赖库文件:
(2)
静态库和动态库的编译
静态库
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
把.o文件生成静态库
ar -cr -o libaddsub.a *.o (ar:生成库的命令)
动态库
gcc -c -fPIC add.c -o add.o
gcc -c -fPIC sub.c -o sub.o -fPIC目的把.o编译成动态库
.o文件生成动态库
shared 生成动态库
gcc -shared -o libaddsub.so *.o
gcc main.c -laddsub(在编译的时候默认找的是动态库,如果动态库和静态库同时存在,若果想使用静态库需要加上-static )
指定动态库的路径必须为/lib 所以需要把.so文件考到/lib
3.一个程序的内存分配
栈区(stack)—---由编译器自动分配释放,存放函数的参数值,局部变量的值和返回值等。其操作方式类似于数据结构中的栈。
堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区—全局变量和静态变量的存储是放在一块的,初始化的全局 变量和静态变量在一块区域(data段),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(bss段)。程序结束后由系统释放。
文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。
程序代码区—存放可执行程序的二进制代码,只读的