c语言除疑系列讲座笔记

来源:互联网 发布:淘宝上好看的男鞋店 编辑:程序博客网 时间:2024/05/17 02:45

1.注意函数的封装,尤其是参数的设计。

2.库属于第三方代码,需要包含头文件,在链接的时候会通过环境变量找到lib.o文件并包含进去。

3.尽量避免系统调用:即软硬件之间的切换。

4.main函数也是一个函数,只不过在编译的时候做了特殊的处理。

5.函数的名字就相当于是一个地址,相似的是汇编里的lable标号。

6.内存的使用:全局变量是在编译的时候就分配了。(这个有点难以理解)函数中的变量时在栈中分配的(因此函数调用结束的时候会自己消除)。而new等的动态奉陪是在堆上分配的。

7.parameter和argument的区别,一个是形式参数,一个是实参

8.函数返回的时候不仅会返回值,并且会隐含的返回一个地址,即汇编中的call ,和ret。返回到调用它的代码段中

9.函数参数的入栈顺序一般是从右向左,一般是。使用的时候就pop

10.栈是从高地址向低地址使用,而堆是从低地址向高地址使用(从两边到中间)

11.程序在内存中的存放顺寻:从低地址——》高地址为:

code      全局变量,常量。       堆:                             栈                         (大概如此,从汇编很好理解)

12. 调用一个函数的时候call会先将函数的地址push到栈中,以使用ret返回,然后修改eip(instruction pointer)指令指针。

13.函数返回值放在eax中,消除被调用函数的stackframe。pop esp

14.值传递:哪怕是指针,它也是值传递,只不过是相对于指针本身是值传递,但是指针指向的值是可以改变的。

15.int * & p;从右向左看,首先他是一个引用,然后是一个指针的引用,然后是一个int型的指针的引用。明白了

16.int func(int array[5]);在编译的时候当成是一个数组,或者一个整形指针,但不进行检查有多少个,可以传递三个的数组,当使用array[5]的时候会造成内存的禁止访问,但当参数为int (&a)[5]的时候会强制要求是5的长度的。()不能少。

17.数组参数传递时会退化成一个指针。一个指针的长度一般为4Bytes。

18.32位机器的虚拟内存为4G。即程序使用的时候都认为自己拥有4G的空间。

19.程序放到内存中的时候,在高地址处的首部会有:程序名,环境变量,控制台参数

20.内存中的每个程序都见到自己的地址为0X08048000~0Xffffffff。但在物理内存中不一定了就,所以需要之间有一个转换工具,硬件实现。

(未完待续)

原创粉丝点击