首页 > 试题广场 >

给你一个类,里面有static,virtual,之类的,来说

[问答题]

给你一个类,里面有static,virtual,之类的,来说一说这个类的内存分布

我想以我浅薄的学识评论一下这题,不知道是对是错,希望有大佬或者明白人能告诉我。
在我学的知识体系中,我觉得这个图是错的,内存里面是没有.rodata只读数据段,.rodata应该是目标文件布局中的概念,就是可执行文件。
比如一个ELF可执行文件中,有这么几个段:ELF头,段头表,.init,.text,.rodata,.data,.bss,.symtab,.debug,.line,.strtab,节头表,.symtab,.rel.text
当文件加载到内存里面后,.rodata根据系统的一些操作,有时候像单片机就直接加载到ROM里面了,不加载到内存,有时候常量字符串加载到.text段,有时候加载到代码里面,比如一些constexpr替换的数字,还有一些加载到.data或者.bss里面。
所以我觉得.rodata这个词不应该出现在内存结构里面。

附上我自己查的一些参考链接

摘自:堆内存和栈内存及C++内存分配 - 走看看 
摘自:进程虚拟内存的布局_TABE_的博客-CSDN博客 
摘自:操作系统(杂)内存区域_三丰杂货铺的博客-CSDN博客 
摘自:判断C++中一个变量存在的位置(.rodata段 .bss段 .data段还是栈中)_River-D的博客-CSDN博客
摘自:数据段(BSS段、DATA段)、代码段(.RODATA)、堆栈段的区别_weixin_34363171的博客-CSDN博客
摘自:linux 目标文件(*.o) bss,data,text,rodata,堆,栈_Sunny04的博客-CSDN博客_bss data

发表于 2022-08-23 03:16:12 回复(0)