当前位置:首页 » 《关于电脑》 » 正文

【C++】面试基础重点知识

1 人参与  2024年09月14日 10:41  分类 : 《关于电脑》  评论

点击全文阅读


进程虚拟地址空间划分和布局函数调用堆栈的详细过程

进程虚拟地址空间划分和布局

任何的编程语言=》 都会产生两种东西
1.指令
2.数据
当一个程序运行时,Linux操作系统会给当前进程分配一个2的32次方的一块虚拟地址空间 也就是4个G。(×86 32位Linux系统下)

拓展:

它存在,你可以看得见,它是物理的
它存在,你看不见,它是透明的
它不存在,你却可以看见,它是虚拟的
它不存在,你也看不见 , 它是被删除的

用户空间(3G):
0×00000000到0×08048000此段不可访问/读写
指令在运行时存放在代码段/.text段
.rodata 只读数据段
.data 数据段 存放初始化或者初始化不为0的
.bss 数据段 存放未初始化或者初始化为0的(内核会自动给该段数据清0)
.heap 堆空间
.加载动态链接库*.dll *so
stack 函数运行时栈空间
命令行参数和环境变量

此上为用户空间默认划分大小

内核空间(1G):
ZONE_DMA(16mb)
ZONE_NORMAL(800mb)
ZONE_HIGHMEN

全局变量 :不管是不是静态的 都叫做数据,编译后都会产生符号,初始化并不为0的都放在.data段
未初始化或初始化为0的都放在.bss段。

局部变量:编译不会产生符号,会生成指令。
比如 int a = 12; 会产生指令 mov dword ptr[a] , 0Ch,不管是否初始化后者初始化为0都会存放在.text段

但是对于静态局部变量,初始化了并且不为0,会存放在.data段。未初始化或者初始化为0 会存放在…bss段

注意:每一进程的用户空间是私有的,内核空间是共享的

函数调用堆栈的详细过程

#include <iostream>// 求和函数int sum(int a, int b) {int temp = 0;temp = a+b;    return temp;}int main() {    // 测试求和函数    int num1 = 10;    int num2 = 20;    int result = sum(num1, num2);    std::cout << result << std::endl;    return 0;}

底层分析:

int num1 = 10;
对应指令:mov dword ptr[ebp - 4],0Ah

int num1 = 20;
对应指令:mov dword ptr[ebp - 8],14h

int result = sum(num1, num2);
会先调用sum函数
mov eax,dword ptr[ebp -8]
push eax
mov eax, dword ptr[ebp - 4]
push eax
call sum //自动将下一行地址压栈
得到地址后
add esp,8
mov dword ptr[ebp-0Ch],eax

进入左括号 int sum(int a, int b) {在原来的栈帧中开辟新空间
底层指令 :
push ebp
mov ebp,esp
sub esp,4Ch
rep stos
for

int temp = 0;
底层指令:mov eax,dword ptr[ebp - 4],0

temp = a+b;
底层指令:mov eax,dword ptr[ebp+8] a+b
mov dword ptr[ebp-4],eax

return temp;
底层指令:mov eax,dword ptr[ebp-4] 把temp的值保存在寄存器eax中

} //出右括号
底层指令:mov esp,ebp
pop ebp
ret //出栈操作,把出栈的内容放入CPU的PC寄存器里

举例:
在函数外边可以正常打印里面的返回值,因为 栈内存空间的数据还在,但是当中间有调用别的函数就会覆盖此处的空间从而报错。所以这样的代码不安全。

编译过程:
预编译
#开头的命令,除了#pragma lib/link等
编译
g++/gcc -O
汇编
符号表的输出
二进制可重定位的目标文件(*.obj)
** . o文件格式
链接过程:
编译完成的所有.o文件 + 静态库文件
步骤一:所有.o文件段的合并,符号表合并后,进行符号解析
步骤二:符号的重定位(重定向)
符号解析成功后给所有的符号分配虚拟空间地址。
readelf -S main.o 查看各个段


点击全文阅读


本文链接:http://zhangshiyu.com/post/159663.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 林晚夏江肆年(进错房,嫁给八零最牛特种兵在线阅读)全文免费阅读无弹窗大结局_(林晚夏江肆年)进错房,嫁给八零最牛特种兵在线阅读免费阅读全文最新章节列表_笔趣阁(林晚夏江肆年) -
  • 进错房,嫁给八零最牛特种兵完整版阅读小说(林晚夏江肆年)全文免费阅读无弹窗大结局_(进错房,嫁给八零最牛特种兵完整版阅读)林晚夏江肆年免费阅读全文最新章节列表_笔趣阁(进错房,嫁给八零最牛特种兵完整版阅读) -
  • 新雪藏旧事全文全文(商云萝周砚京)全文免费阅读无弹窗大结局_(新雪藏旧事全文小说免费阅读)最新章节列表_笔趣阁(新雪藏旧事全文) -
  • 在线免费小说重生七零替嫁:不嫁教授,嫁军官_乔珊珊乔婉月新热门小说_热门小说乔珊珊乔婉月
  • 免费小说《冯云漪厉晋泽》已完结(冯云漪厉晋泽)热门小说大结局全文阅读笔趣阁
  • 祁兰湘邵黎晖小说_祁兰湘邵黎晖完整版大结局小说免费阅读
  • 完整免费小说老公心疼青梅将她留宿新房,却将怀孕的我赶出家门(乔玥傅慎行姜禾)_老公心疼青梅将她留宿新房,却将怀孕的我赶出家门(乔玥傅慎行姜禾)完本小说免费阅读(乔玥傅慎行姜禾)
  • 新雪藏旧事:结局+番外+完结免费小说在线阅读_小说完结推荐新雪藏旧事:结局+番外+完结商云萝周砚京热门小说
  • 初逢青山梦长安(顾怀瑾沈书妤)阅读 -
  • 无删减版《绝对权力:从天崩开局走上官途巅峰》在线免费阅读
  • 《绝对权力:从天崩开局走上官途巅峰》小说在线试读,《绝对权力:从天崩开局走上官途巅峰》最新章节目录
  • 裴泽苏星辰何娇(满目星辰不及你小说)精彩章节在线阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1