linux学习之虚拟地址

在以往的学习中我们经常接触地址,电脑像一个小房间,它的空间是有限不可重叠的,但是可以覆盖。想象一下如果我们要放很多东西进去,如果没有合理的安排,所有东西乱放,那么我们需要寻找某一个东西的时候需要把房间找一个遍,也就是遍历,但是如果我们把房间的每一个地方都打上标签或者起个名字,然后把每个东西放在哪里记录下来放在一张纸上,我们就可以通过纸来快速定位物品。纸上写的物品信息,就是我们俗称的地址。但是我们有没有想过,我们接触的Linux地址有没有可能不是真正的地址,这就是我接下来要讲的东西了。

一,小代码测试

 #include <stdio.h>#include <unistd.h>#include <stdlib.h>
int g_val = 0;
int main(){pid_t id = fork();if(id < 0){perror("fork");return 0;}else if(id == 0){ //child,子进程肯定先跑完,也就是子进程先修改,完成之后,父进程再读取g_val=100;printf("child[%d]: %d : %p\n", getpid(), g_val, &g_val);}else{ //parentsleep(3);printf("parent[%d]: %d : %p\n", getpid(), g_val, &g_val);}sleep(1);return 0;
}

当运行这段程序之后,我们会发现一个神奇的现象,父子进程g_val的地址居然一样,这是什么情况,一个地址能存储两个值?这不是违背了常识吗,难道是这个空间被分割了,一半储存父进程的值,一半存储子进程的值?

二,谜底揭晓

其实我们看到的并不是系统底层变量真正的地址,而是经过一定处理过后的地址,这个处理手段叫页表,页表里面会将我们所看到的地址转化为实际在电脑中的地址,看似两个g_val的地址一样,但实际经过页表的转化会变成不同的地址。从我查过的资料可得,页表里面首先会记录这个变量或者代码的实际存储范围,可能是由一段或者多段空间组成(指的是地址可能不连续),这段地址与我们看到的地址是对应关系,我们先看一张图来建立大概印象。

那这样子的好处是什么呢,不是多此一举吗?当然不是,首先我们要明白在系统中有时候能分配给我们的空间并不是连续的,如果我们程序员直接处理这些不连续的地址无疑会增加难度,也带来了很多不便,对于新手,地址的理解只会更加混乱,那怎么办呢?我们可不可以封装一下呢,当然可以,封装之后我们无法直接接触底层地址,大大降低了我们的学习难度,同时又能很好的利用碎片空间,也可以保护底层不被用户瞎篡改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2778863.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【从Python基础到深度学习】2. Ubuntu及插件安装

本期所有软件安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1UVEYm-12FivAnrE5NUXevg?pwdum60 一、安装Ubuntu 1.1 软件安装包&#xff1a;下载 VMware Workstation Pro | CN 一直点下一步即可 1.2 双击运行软件&#xff1a; 输入密钥 1 、VMware 15密钥 …

Elasticsearch:混合搜索是 GenAI 应用的未来

在这个竞争激烈的人工智能时代&#xff0c;自动化和数据为王。 从庞大的存储库中有效地自动化搜索和检索信息的过程的能力变得至关重要。 随着技术的进步&#xff0c;信息检索方法也在不断进步&#xff0c;从而导致了各种搜索机制的发展。 随着生成式人工智能模型成为吸引力的中…

fast.ai 深度学习笔记(四)

深度学习 2&#xff1a;第 2 部分第 8 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-8-5ae195c49493 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

Google刚刚推出了图神经网络Tensorflow-GNN

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

钓鱼邮件便捷发送工具(GUI)

简介 本程序利用Python语言编写&#xff0c;使用Tkinter实现图形化界面&#xff0c;可使用Pyinstaller进行exe打包&#xff0c;程序主界面截图如下&#xff1a; 功能 支持腾讯企业邮、网易企业邮、阿里企业邮、自建邮服SMTP授权账号&#xff08;其他邮服&#xff0c;可在自建…

文生图提示词:中国艺术风格

艺术风格 --中国艺术风格 Chinese Art Styles 中国艺术风格深厚且多样&#xff0c;从古至今演化出了许多独特的艺术形式和技法。 Traditional Chinese Painting 中国传统绘画 Ink and Wash Painting 水墨画 Gongbi 工笔 Xieyi 写意 Shan Shui 山水 Bird-and-Flower Painting 花…

第十八篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:图像修复和恢复

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列短博文目录前言一、常用的图像修复与恢复技术二、插值方法示例代码三、基于纹理合成的方法示例代码四、基于边缘保持的方法示例代码五、基于图像修复模型的方法示例代码六、基于深度学习的方法示例代码七…

缺省参数(c++)

void fun(int a0) { cout<<a<<endl; } 当我们调用函数时: fun(10) 输出10; fun&#xff08;&#xff09; 未传参时&#xff1a; 输出0; 未传参时a就会接受0&#xff0c;相当于这个0就是“备胎” 传参了0就没有用 全缺省 void fun2(int a10,int b3,int…

卫星通讯领域FPGA关注技术:算法和图像方面(3)

最近关注的公众号提到了从事移动通信、卫星通讯等领域的FPGA、ASIC、信号处理算法等工程师可能需要关注的技术&#xff0c;有通感融合、RNSS授时、惯导&#xff0c;以下做了一些基础的调研&#xff1a; 1 通感融合 1&#xff09;来自博鳌亚洲论坛创新报告2023:通感算融合已成…

C#入门及进阶|数组和集合(六):集合概述

1.集合概述 数组是一组具有相同名称和类型的变量集合&#xff0c;但是数组初始化后就不便于再改变其大小&#xff0c;不能实现在程序中动态添加和删除数组元素&#xff0c;使数组的使用具有很多局限性。集合能解决数组存在的这个问题&#xff0c;下面我们来学习介绍集合…

【小沐学GIS】基于Android绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

2003-2021年地级市实际利用外资数据/地级市实际利用FDI数据

2003-2021年地级市实际利用外商直接投资数据/地级市FDI数据 1、时间&#xff1a;2003-2021年 2、来源&#xff1a;城市年鉴、统计公报、省统计年鉴&#xff0c;已尽最大程度进行填补 3、指标&#xff1a;省份代码、城市代码、省份、城市、年份、当年实际使用外资金额&#x…

每日一个shell脚本之自动化采集监控指标+登录欢迎

每日一个shell脚本之自动化采集监控指标登录欢迎 效果图参上 源码奉上 #!/usr/bin/bashclear#空闲内存Frfree -h | awk NR2{print $4}#已用内存Usfree -h | awk NR2{print $3}#系统存储空间Us_systemdf -Th | grep /dev/ | tail -1 | awk {print $4}Us_freedf -Th | grep /de…

ubuntu彻底卸载cuda 重新安装cuda

sudo apt-get --purge remove "*cublas*" "*cufft*" "*curand*" \"*cusolver*" "*cusparse*" "*npp*" "*nvjpeg*" "cuda*" "nsight*" cuda10以上 cd /usr/local/cuda-xx.x/bin/ s…

【数据结构和算法】--- 基于c语言排序算法的实现(2)

目录 一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare法1.2.2 挖坑法1.2.3 前后指针法 1.3 快速排序优化1.3.1 三数取中法选key1.3.2 递归到小的子区间使用插入排序 1.4 快排非递归版 二、归并排序2.1 归并排序2.1.1 递归版2.1.2 非递归版 一、交换排序 基本思想&#xff1a…

KVM和JVM的虚拟化技术有何区别?

随着虚拟化技术的不断发展&#xff0c;KVM和JVM已成为两种主流的虚拟化技术。尽管它们都提供了虚拟化的解决方案&#xff0c;但它们在实现方式、功能和性能方面存在一些重要的差异。本文将深入探讨KVM和JVM的虚拟化技术之间的区别。 KVM&#xff08;Kernel-based Virtual Mac…

通胀向下,价格向上

号外&#xff1a;教链内参2.10《内参&#xff1a;BTC真的存在春节模式吗&#xff1f;》 9号&#xff0c;美国劳工统计局BLS对1月份发布的2023年12月份通胀月环比数据进行了修订&#xff0c;下修了0.1%&#xff0c;从0.3%下调为0.2%。更骚气的是&#xff0c;还把前值也就是11月的…

无性能损失!让SAM加速近50倍!EfficientViT-SAM来了!

今天给大家分享一个加速视觉分割大模型的工作&#xff1a;EfficientViT-SAM。这是一种新的加速SAM系列。保留了SAM的轻量级提示编码器和mask解码器&#xff0c;同时用EfficientViT替换了沉重的图像编码器。对于训练&#xff0c;首先从SAM-ViT-H图像编码器到EfficientViT的知识蒸…

Nginx实战:3-日志按天分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、方式1&#xff1a;定时任务执行分割脚本 1.分割日志脚本 2.添加定时任务 二、方式2&#xff1a;logrotate配置分割 1.logrotate简单介绍 2.新增切割ngi…

Debezium发布历史120

原文地址&#xff1a; https://debezium.io/blog/2022/04/07/read-only-incremental-snapshots/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Read-only Incremental Snapshots for MySQL April 7, 2022 by K…