C++的犄角旮旯

1、函数调用时参数的压栈顺序


C/C++编译器函数调用时参数压栈顺序是从右向左的,比如int fun(int a, int b, int c),压栈顺序是c,b,a;编译器不同可能会打破这个规则=_=!

2、标准C++类型转换static_cast、dynamic_cast、reinterdivt_cast、const_cast


这些转换主要是对子类转父类时的一些限制,总体来说static_cast没有动态类型检查,因此是不安全的;而dynamic_cast是安全的,如果不成功会返回空指针;
具体分析可以参见这篇文章http://www.cppblog.com/pjqblues/archive/2007/10/23/34945.html。

3、C++编译过程


预处理-编译-汇编-链接。http://blog.csdn.net/bjtbjt/article/details/6707327。

4、C++内存对齐


内存对齐分为两步,第一步是结构体内的数据对齐,第二步是结构体整体对齐;
(编译器在给结构体开辟空间时,首先找到结构体中最宽的基本数据类型,然后寻找内存地址能是该基本数据类型的整倍的位置,作为结构体的首地址。将这个最宽的基本数据类型的大小作为对齐模数)
(1)数据对齐规则,选择该数据长度与预定义的对齐长度中较小的一个作为对齐常数,数据放置的位置偏移量要能够整除对其常数;
(2)整体对齐规则,选择结构体中数据长度最长的一个与对齐长度比较选择较小的一个作为对齐常数,结构体的最终大小要能被对齐常数整除;
参考http://baike.baidu.com/view/4786260.htm。

5、C++中的memset、memcpy


memset用于对一段类存空间初始化设置,如将内存全部设置为每一个值等;
memcpy用于拷贝内存,将一段内容拷贝到另一段。

6、C中strcpy与strdup的区别

函数原型:(1)char *strdup(char *s);(2)char *strcpy(char *dest,char *src);
区别:两个都用来实现字符串的复制,但由函数本省也可以看出,strdup只传入源地址,而strcpy还需要传入目的地址,因此strdup函数会自动分配源字符串大小的空间复制并返回,而strcpy需要用户自己申请内存dest,之后strcpy只负责拷贝。



你可能感兴趣的:(C++,C++,c,c,汇编,编译器,fun)