编译C程序并创建目标文件(ELF)时.目标文件包含不同的部分,如bss,数据,文本和其他段.我知道ELF的这些部分是虚拟内存地址空间的一部分.我对吗?如果我错了,请纠正我.
此外,将存在与编译的程序相关联的虚拟存储器和页表.页表在加载程序时将ELF中存在的虚拟内存地址与实际物理内存地址相关联.我的理解是否正确?
我在创建的ELF文件中读到,bss部分只保留未初始化的全局变量的引用.这里未初始化的全局变量是指在声明期间未初始化的变量?
另外,我读到局部变量将在运行时(即堆栈中)分配空间.那么它们将如何在目标文件中引用?
如果在程序中,有特定的代码段可用于动态分配内存.如何在目标文件中引用这些变量?
我很困惑,目标文件的这些不同部分(如文本,rodata,数据,bss,堆栈和堆)是物理内存(RAM)的一部分,所有程序都在其中执行.但我觉得我的理解是错误的.当进程或程序执行时,这些不同的段如何与物理内存相关?
如何声明一个返回另一个函数指针的函数的指针?请与我分享语法和示例代码段.
另外,在哪种情况下会使用返回函数指针的函数指针?
起始地址可以从函数名中获取,如何查找函数的结束地址?我在采访中被问到这个问题:
考虑我写的函数f()已越过文本部分并开始编写相邻部分(数据部分).我该如何处理这种情况?他还补充说我应该通过C代码处理它.我不应该看到符号映射文件并获取地址.
如果我发现链表中的指针(链接)字段已损坏,我该如何解决这个问题?
我在面试中被问到这个问题.我说不,它不可能解决它.采访者告诉它可能.有什么方法吗?
我已经读过C中未初始化的全局变量将占用内存的.bss部分.它也只是一个占位符,不会占用目标文件中的任何空间.
我的问题是,一旦未初始化的全局变量被分配了一些值,它将在哪里存储在物理内存中?
例如:
int a[100];
int main()
{
a[10] = 25;
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,将分配内存位置?