微软更新Visual Studio 2022强化C++开发体验,除了让开发者可以简单查看类别、结构(Struct)、联合(Union)、基础类型和枚举(Enum)的大小和对齐方式之外,同时,Visual Studio 2022还能可视化C++类别、结构和联合的内存布局,方便开发者管理内存使用和优化程序执行性能。

C++开发者现在可以更有效率地查看数据结构的内存占用量,以及内存的对齐方式。该新功能让开发者只要将鼠标悬停在相关的识别码(Identifier),就能查看快速资讯工具提示,即时检查类别、结构和联合的大小和对齐状况,而这将有助于开发者理解复杂程序中的内存布局。

在C++中,结构或是类别的大小,主要取决于数据成员的大小,以及为了内存对齐所添加的填充,而加入虚拟函数等因素也可能影响其大小。微软举例,一个名为SimpleClass的类别,包含整数x和ClassWithVirtualFunction类别对象,具有虚拟函数的类别隐藏一个指向虚拟方法vtable的虚拟指标vptr,这个vptr对于SimpleClass产生了较高的对齐要求,导致占用内存空间比预期的8字节还多,实际上为16字节(下图)。

官方解释,这类大小增加是因为第一个类别中的vptr需要8字节对齐,进而导致编译器对第二个类别进行填充。虚拟函数影响类别内存占用,在过去是难以观察的细节,而Visual Studio 2022更新功能,使开发者不需要编写额外的程序代码计算,只要通过简单的鼠标操作,即可查看隐藏的内存占用资讯。而清晰了解内存占用量和对齐方式,有助于开发者优化程序的性能和内存使用。

此外,Visual Studio 2022还加入了内存布局查看图,这项功能呈现类别、结构和联合的内存排列方式,对于优化内存布局工作特别有用。开发者现在可以更直觉地查看类别中所有数据成员的填充、偏移和大小。

开发者只要将鼠标光标停留在类别名称上,无论是声明还是定义,都会出现一个快速资讯工具提示,除了大小和对齐,也会出现内存布局连接,点击连接开发者即可访问互动式内存布局查看图,开发者可方便地观看单个数据成员具体偏移和大小。

而且该功能还提供COM类型的v-table内存布局查看图,协助开发者理解COM对象的基本结构和组织。微软提到,这将有助于C++开发者提高程序效率和理解度,更容易管理内存和处理数据结构。