标签:
听了这节课,感觉收获很多,老师从一个特别底层的角度教我们应该怎么样去做,让我弄明白了以前一直不能弄明白的问题。比如类和对象的存储问题,对象中的方法存储应该存储在代码区,那个是冯.诺依曼的结构,代码和数据混在一起,然后分别用CS,DS去区分这些是数据还是代码,所以会有数据区和代码区,而数据区又可以分为:
栈(stack),就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆(heap),一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的(DATA段)和未初始化的(BSS段),在C++里面没有这个区分了,它们共同占用同一块内存区。
常量存储区,常量字符串就是放在这里的,不允许修改(通过非正当手段也可以修改,而且方法很多),程序结束后由系统释放。
栈与堆的区别:栈是在线性地址区域,申请和释放由编译器自己做,而堆必须要求自己申请和自己进行释放!
进而,老师讲了inline函数与宏定义define的区别与联系:
define只是展开,并不经过编译,也就是编译器并不进行检查工作,即使出错了,编译器也不会发现,而对于inline来说,编译器是进行检查的,而且inline函数与define一样,是进行内部展开的,并不需要进行函数的调用,也就是不需要堆栈去浪费时间。
还有就是老师讲了一种cpp和h分开的方式,这种方法比较好的原因是因为inline函数不能写太多行代码,所以应该尽量用.cpp+.h文件的形式!
标签:
原文地址:http://www.cnblogs.com/wit-lq/p/4827700.html