C++总结分析和总结.docxVIP

  • 2
  • 0
  • 约1.36万字
  • 约 21页
  • 2023-04-26 发布于上海
  • 举报
一、struct 字节对齐问题 原则:对齐的标准:编译器的对齐模式和struct 中的数据的最大字节取的最小值例一: #pragma pack(4) #includestdio.h #includestdlib.h #includeiostream using namespace std; void main() { struct TEST_1 { int a; char *b; float c; double d; }; coutsizeof(TEST_1); system(pause); } 该程序的输出结果为:20 首先编译器的对齐模式为4,该结构体中的最大数据(double)占 8个字节, 取最小为4,所以该结构体的对齐模式为 4. Int a 占4个字节,char *b占 4个字节,float c占4个字节,double d占8个字节,所以该结构体占20字节. 例二: #pragma pack(2) #includestdio.h #includestdlib.h #includeiostream using namespace std; void main() { struct TEST_1 { int a; char b; char list[9]; double c; }; coutsizeof(TEST_1); system(pause); } 该程序的输出为:22 首先,该struct的对齐方式为2; Struct是按照基本数据类型对齐的,也就是说此题中的 char 型数组list是按照连续9个char存储的,所以list和上边的char b一起 占10个字节。Int a占4 个字节,double c占8个字节,所以整个struct为22 例三: #pragma pack(4) #includestdio.h #includestdlib.h #includeiostream using namespace std; void main() { struct TEST_1 { int a; char b; }; struct TEST_2 { TEST_1 tStr1; char a; int b; }; coutsizeof(TEST_2); system(pause); } 输出结果为:16 如果两个结构体嵌套,那么就自己算自己的,然后相加。 二、判断大小端 大端:(Big-Endian)就是把数值的高位字节放在内存的低位地址上,把数值的地位字节放在内存的高位地址上。 小端:(Little-Endian)就是把数字的高位字节放在高位的地址上,低位字节放在低位地址上。 #pragma pack(4) #includestdio.h #includestdlib.h #includeiostream using namespace std; void main() { union { int a; char b; }u; u.a=0 coutint(u.b); system(pause); } 输出为:4 根据union的特性,int a和char b是共享同一块内存,char b存储的是int a 中的第一个字节,根据该程序的结果说明,该cpu是个小端。该问题用另外一种方法实现为: #pragma pack(4) #includestdio.h #includestdlib.h #includeiostream using namespace std; void main() { int a; char *b; a=0 b=(char *)a; coutint(*b); system(pause); } 同样得到与用union相同的结果。 三、溢出问题 产生溢出的原因: 内存溢出问题是 C 语言或者 C++ 语言所固有的缺陷,它们既不检查数组边界,又不检查类型可靠性(type-safety)。众所周知,用 C/C++ 语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,这种特性大大提升了 C/C++ 语言代码的性能。只要合理编码,C/C++ 应用程序在执行效率上必然优于其它高级语言。然而,C/C++ 语言导致内存溢出问题的可能性也要大许多。其他语言也存在内容溢出问题,但它往往不是程序员的失误,而是应用程序的运行时环境出错所致。 当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了 N 字节大小的内存缓冲区,随后又向其中复制超过 N 字节的数据)。内存缓冲区就可能会溢出。想一想,如果你向 12 盎司的玻璃杯中倒入 16 盎司水,那么多出来的 4 盎司水怎么办?当然

文档评论(0)

1亿VIP精品文档

相关文档