C++
C++
超級码力
Keep Reading , Keep Writing , Keep Coding.
展开
-
C++--编译器工作原理
编译器:我们常用的编译器一般有Visual Studio(Windows),Xcode(OS),GCC(Unix)等。它们的主要功能就是把我们写的高级代码转换成可执行的二进制程序。这个转换过程主要通过预处理器,编译器和连接器完成,同时它们也是可以分别设置属性,用来控制代码的生成方式。1,预处理器设置:如一些平台相关的宏设置,通过控制这些宏定义,来编写跨平台代码。(而且现代的预处理器,还可以直接通过命原创 2015-06-05 16:19:30 · 5557 阅读 · 0 评论 -
C++--继承与多态
虚函数 在C++中,使用关键字virtual声明函数为虚函数,那么在对象创建调用构造函数里就会隐式的生成一个虚表指针(它被定义在对象首地址的前4个字节处,有虚函数的对象大小要多加4字节,就是多了一个指针的大小,因此虚函数必须是成员函数),它指向一个虚函数列表并初始化,这个虚函数列表其实就是一个指针数组,保存着这个对象所有虚函数的首地址。我们的多态(继承中)其实就是通过虚函数实现的,反过来虚函数就是原创 2015-05-16 10:08:14 · 2539 阅读 · 0 评论 -
C++--构造函数与析构函数
malloc与new区别 1,malloc是c语言的函数而new是c++里的运算符。 2,new会自动触发构造函数,而malloc不负责触发构造函数。所以成功分配内存的话,new返回对应类型的指针而malloc(num:即多少个字节)是不知道类型的,返回void *。分配失败则是返回NULL。并不是每个对象都会有默认构造函数 1,本类或父类里定义了虚函数,会要调用默认构造函数,初始化虚表。原创 2015-05-15 14:30:30 · 2463 阅读 · 0 评论 -
C++--结构体和类
结构体和类只有一个区别就是前者访问控制默认为public,而类的默认访问控制是private。而对于public,private,protected的访问控制都是在编译期间由编译器检查的,编译通过后,程序执行过程中就不存在什么访问限制了。它们在底层只是类型名称不同,原理都相同。类与对象,类是一个抽象的概念,而对象则是这个抽象概念里的一个具体实例。(如人–CXX…)类一般由数据成员和函数成员组成,而原创 2015-05-14 14:49:18 · 3003 阅读 · 0 评论 -
C++--函数,变量,数组底层表现
函数的工作原理 函数调用其底层操作是创建了一个栈空间,而函数的入口地址,参数,临时变量等就是先通过push入栈,返回时pop出栈释放,保存栈平衡,系统自动管理内存。这个栈通过ebp(栈底)和esp(栈顶)两个寄存器管理控制。变量在内存中的表现形式 局部变量:保存在栈区,运行时对应申请的内存,生命周期就是在自己的作用域内。 全局变量:表现类似常量,在编译时就已经存在,其内存地址由编译器在运行前原创 2015-05-11 19:44:49 · 2337 阅读 · 0 评论 -
C++--流程控制语句
从底层谈流程控制语句 一般语句是从低地址到高地址(从上往下)顺序执行的,而流程控制语句则不是顺序执行而是通过 jxx 和 cmp (跳转和比较)指令实现的。而不同的流程控制语句之间效率的比较,我们主要是看它们跳转的次数多少,越少跳转,效率越高。不过这些,编译器一般会做优化,如把跳转次数多的控制语句转换成次数少的语句等。if…else 与 switch语句的比较 if 语句条件判断对应的汇编跳转原创 2015-05-08 14:36:40 · 2885 阅读 · 0 评论 -
C++--观察各种表达式与编译器使用的优化技巧
观察各种表达式的求值过程算术运算 1,包括“+,-,*,/”,如果不考虑编辑器的优化,他们在底层的运算过程一般是:先从内存中把值拷贝到寄存器中,然后在cpu中进行相应地运算,最后再把结果送回到内存。(对于常量一般就是直接当立即数用,都不需要经过内存) 注:’%’ 运算的符号和第一个操作数的符号一致。对于 ‘/’ 运算,有符号 / 有符号 = 有符号,无符号 / 无符号 = 无符号,但是要注意原创 2015-05-07 16:05:14 · 2673 阅读 · 0 评论 -
C++ -- 基本数据类型的表现形式
基本数据类型的表现形式整数类型 C++提供的整数类型有三种:int, long, short,在32位系统中,int, long 都占4字节,short占2字节。同时它们又可以分为有符号型与无符号型,在内存中,前者数据由一个符号位 + 数据位组成,而后者全是数据位组成。所以无符号整数类型表示的正数区间比有符号表示的正数区间要大一倍。如以int为例,对于unsigned int的取值范围:0x00原创 2015-05-05 17:03:08 · 2448 阅读 · 0 评论