- 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 盎司水怎么办?当然
您可能关注的文档
最近下载
- 精神科暴力行为预防及处置.ppt VIP
- 数列型不等式的放缩方法.docx VIP
- “五个带头”方面存在问题原因剖析、下一步整改措施对照检查材料(六篇)2026年.docx VIP
- 深度解析(2026)《SJT 11140-2022 铝电解电容器用电极箔》.pptx VIP
- RBT 107-2024 能源管理体系 公共建筑管理组织认证要求.pdf VIP
- T_SGZX003—2024固态铝电解电容器用电极箔.pdf VIP
- 2026-2030中国商用飞机铝锂合金行业市场发展趋势与前景展望战略分析研究报告.docx
- 2024年常州信息职业技术学院单招职业技能测试题库(历年真题).docx VIP
- 电气土建工程图例符号.doc VIP
- 新版食品生产许可管理办法.pptx VIP
原创力文档

文档评论(0)