首页 > 编程知识 正文

十大微软最难面试题(程序员逻辑思维面试题)

时间:2023-05-05 02:51:13 阅读:68173 作者:1461

#包含

# pragma包(8) )。

结构example 1

{

短a;

龙格b;

(;

结构example 2

{

char c;

Example 1结构1;

短时间;

(;

输入主(语音) )。

{

Example 2结构2;

printf(%u(n )、sizeof ) Example1);

printf(%u(n )、sizeof ) Example2);

printf('%u(n ),(unsigned int ) ) struct2.struct1)-(unsigned int ) ) struct2);

返回0;

}

首先,你需要记住那个准则。

数据类型自身的对齐值,例如char自身的对齐值为1字节,int为4字节

结构或类的自对齐值,其成员中自对齐值最大的值

创建对准值,#pragmapack(value )时创建对准值

数据成员、结构和类的有效对准值是其中自身对准值和指定对准值中较小的一个,即有效对准值。

这里,有效的对准值n是用于最终确定数据存储目的地的方式的值。 有效的对齐n表示“对齐到n”,即该数据的“存储开始地址%N=0”。 数据结构中的所有数据变量都以定义的优先级存储。 第一个数据变量的起始地址是数据结构的起始地址。 结构成员变量必须对齐并存储,结构本身也必须根据其有效对齐值舍入(即结构成员变量的总占用长度是结构有效对齐值的整数倍)。

字节数规定:

sizeof(shortint )=sizeof (int ) ) )。

sizeof(int )=sizeof (longint ) )。

短整型必须至少为16位(2字节)

长整型必须至少32位。

我开始分析这个主题的答案:

从#include的角度看,它包含stdio.h头文件。 同时用预处理命令将中生成的自身的对准值设为8,

从main函数开始分析,首先声明example2结构,然后打印example1、example2结构的占用字节大小,最后从example2结构中的example1结构的地址中减去example2结构的地址

main函数很简单。 然后,我们来看看example1结构体。 结构体中包含short和long,由于32位机器short2字节、long4字节,所以结构体的最大自对准值为4,此时存储器分配为short2、焊盘2、long4,总共占用8字节。

在example2结构中,example1结构的最大对齐值定义为4,char定义为1,short定义为2,预处理定义为8,因此仍然以4字节进行对齐。 此时,内存分配为char 1、焊盘3、example1 8、short 2和焊盘2,总共占用16个字节。

所创建的堆栈分配给堆,堆地址递增,因此example2的初始地址为x,char和填充字节占4字节,example1结构、so,(unsigned int ) (ssigned int )

这次验证采用visual studio,本地计算机为linux,在星期三考试结束之前复制visual studio的屏幕快照

deepin 15.3 64的验证结果如下。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。