C专家编程学习笔记

发现自己博客很久没有更新了,贴篇几个月前的读书笔记。C专家编程,一本不错的介绍C语言的书,适合对C有初期了解的人读。

 

static: 变量在各个调用阶段保持延续性,函数只对该文件可见。

extern: 函数全局可见,变量表示该变量在其他地方定义。

 

gets函数不检查缓冲区的空间,多读取的字符会重写入堆栈,可能导致堆栈错误。

 

函数中的变量是在堆栈中分配的,当函数调用结束时会自动销毁。

 

int (*a)[10]--指向一个数组的指针,数组中元素是10;

int *a[10]--整型指针,指向一个10个元素的数组。

 

char* const *(*next)()--next是一个指针,指向一个函数,改函数返回一个指针,该指针指向一个类型为char的常量指针。

 

#define可被其他类型符修饰,typedef不能被修饰。

 

指针的使用:先去的指针的值,在用去的的值去访问对应地址的值,数组名访问是直接访问值,数组名是只读的,

定义指针时编译器不为指针所指对象分配空间,值分配指针本身的空间,但是字符串常量除外char *p = abc,编译通过,int *p = 10,编译不通过,指针没有经过初始化不能直接使用。

 

动态链接在程序运行时会查找相应的ABI,装载ABI进程序,因此程序会减小,但是运行速度回变慢,所有程序共享动态链接库,又称共享库;

EPC文件由段组成:

RSS段:声明但未初始化的变量

数据段:初始化了变量

文本段:程序指令区

堆栈段:保存局部变量,临时数据,传递到函数中的参数

堆:动态内存分配区,位于数据段中,堆中的内存分配容易产生内存碎片

活动记录:记录函数调用过程的记录。

 

cache存储器每次读取内存中的一行数据(16或者32字节);

cache块数据,一般是32字节;

cache与内存数据一致策略:全写法,回写法;

 

malloc返回的内存大小实际都是2n次方。

 

总线错误:数据未对齐读写造成的错误;

内存对齐:数据项只能存储在地址是数据项大小的整数倍的内存位置上,与对齐有关的额外逻辑会使整个内

存系统更大更慢。由于内存对齐,Cache访问才能局限子啊一个一行或者单个页面中;

段错误:内存单元访问的异常,通常是由于指针的使用不合法所致。

 

数组是以指针的形式传递到函数中的,所以在函数中数组的访问实际是按照指针的规则进行访问的。

 

你可能感兴趣的:(c,读书笔记)