c++ 杂谈 3

发布于: 2020 年 09 月 28 日
c++ 杂谈3

结构体

struct定义的结构体

struct Student

{

char name[6];

int age;

Score s;

};

使用union定义联合体

union Score

{

double sc;

char level;

}

所谓联合体就是 double和char共同使用同一个空间,所以虽然一个是8字节一个是1字节,但是一共还是只有8个字节,取得是最大的一块

因此,其内存布局应该是这样的

顺序不同对于内存开销也会不一样



综上总结数据对齐——缺省对齐原则:

32位CPU:

char:任何地址

short:偶数地址

int:4的整数倍的地址

double:8的整数倍的地址





命名空间

命名空间定义了上下文,其本质上定义了一个范围;但是有可能会产生冲突



函数体

包含一组定义函数执行任务的语句

函数体的hack过程

进行反汇编,得到汇编代码如下:

int main()
{
001D1650 push ebp
001D1651 mov ebp,esp
001D1653 sub esp,0C0h
001D1659 push ebx
001D165A push esi
001D165B push edi
001D165C lea edi,[ebp-0C0h]
001D1662 mov ecx,30h
001D1667 mov eax,0CCCCCCCCh
001D166C rep stos dword ptr es:[edi]
return 0;
001D166E xor eax,eax
}
001D1670 pop edi
001D1671 pop esi
001D1672 pop ebx
001D1673 mov esp,ebp
001D1675 pop ebp
001D1676 ret

ebp esp 等都是寄存器



内联(inline)函数,解决程序效率问题

就是不用考虑他的压栈的过程或者 出栈的过程

在函数体中加上inline,内联不适合在递归上进行调用



递归



字符串的重载 使用operator关键字

对于自己定义的一个类complex做加法操作

Complex Complex Complex::operator+(const Complex& x)
{
Complex tmp;
tmp._real = _real+x._real;
tmp._image = _image + x._image;
return tmp;
}+(const Complex& x)
{
Complex tmp;
tmp._real = _real+x._real;
tmp._image = _image + x._image;
return tmp;
}

Complex::operator+,代表+在complex类里面使用



发布于: 2020 年 09 月 28 日 阅读数: 16
用户头像

一个孤独的撰写者 2020.07.30 加入

主攻云计算、云安全,c++、python、java均有涉猎

评论

发布
暂无评论
c++ 杂谈3