C/C++学习
文章平均质量分 79
熟悉编程技巧
路上的追梦人
尽人事,听天命
展开
-
Linux网络编程
本文的笔记来自于b站视频的爱编程的大丙,博客链接:https://subingwen.cn/,有做了相应的补充!转载 2021-08-18 15:24:42 · 850 阅读 · 0 评论 -
线程池的工作原理及C++实现
本文的笔记来自于b站视频的爱编程的大丙,博客链接:https://subingwen.cn/,有做了相应的补充!一、线程池的原理线程池是一种多线程处理的形式,处理过程中将任务添加到队列,任何在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件的发生),则线程池将插入另外一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段..转载 2021-08-17 18:46:12 · 1918 阅读 · 0 评论 -
面试必备-C++11新特性
本文的笔记来自于b站视频的爱编程的大丙,博客链接:https://subingwen.cn/,有做了相应的补充!一、字符串原始字面量二、指针空值类型-nullptr三、constexptr修饰常量表达式1、常量表达式函数四、使用auto进行类型自动推导一般情况下库,auto在自动推导类型在编译时期确定的,但当模板函数的返回值依赖于模板的参数时,我们依旧无法在编译代码前确定模板参数的类型,故也无从知道返回值的类型,这时我们可以使用auto。template <typen.转载 2021-08-14 19:32:53 · 1096 阅读 · 0 评论 -
C、C++多线程编程
一、线程概述进程对应的虚拟地址空间的各个分区如图:每个进程的虚拟地址空间都是从0地址开始的,在程序中打印的变量也是在虚拟地址的,程序是无法直接访问物理内存的。虚拟地址空间中用户地址空间的范围为:0~3G,里边分为多个区块。线程是轻量级的进程(lightweightprocess),在Linux环境下线程的本质仍然是进程,在计算机运行的程序是一组指令以及指令参数的组合,指令按照既定的逻辑控制计算运行,操作系统会以进程为单位,分配系统资源,可...转载 2021-08-14 11:25:03 · 772 阅读 · 0 评论 -
百度笔试- 序列合并
描述其中系数aj都是整数满足0≤aj≤1000且至少有两个系数严格大于0,分别将n=1,n=2,n=3n...代入以上函数可以得到一个无穷长度的整数序列,即用8个系数a7,a6...a0可以唯一确定一个无穷长度的整数序列,现在给出k个通过以上方法定义的无穷序列,你需要求出将这些序列所有数字放在一起后,第n小的数字是多少?输入描述:第一行包含一个整数k,1≤k≤104接下来k行,每行包含8个整数a7,a6,.....a0,表示一个函数的系数,0≤aj≤1000最后一行包含一个整数n,1原创 2021-08-13 11:40:05 · 116 阅读 · 0 评论 -
一文弄懂差分数组!
差分数组给定一个数组A:A[1]、A[2]、A[3]、A[4]、A[5].......A[i],令数组B为:B[1]、B[2]、B[3]、B[4].......B[i],满足B[1]=A[1],B[2]=A[2]-A[1],B[3]=A[3]-A[2],B[4]=A[4]-A[3],B[5]=A[5]-A[5]........B[i]=A[i]-A[i-1],则称数组B为差分数组。进一步对数组B分析,可以发现数组B的前缀和Sum,存在Sum[i]=B[1]+B[2]+B[3]+B[4]+B[5].原创 2021-07-12 16:11:49 · 190 阅读 · 0 评论 -
C++11新特性-移动构造、移动赋值与右值引用、完美引用
拷贝构造的深拷贝和重载赋值的深赋值算是理解了,C++编译器做了优化,临时对象作为函数的返回值后,并没有调用拷贝构造函数了,而是在外部对新的对象进行初始化。原创 2021-06-01 17:14:05 · 296 阅读 · 0 评论 -
C++STL类型萃取与迭代器的深入探究
C++的类型萃取技术自从C++中引入了template后,以泛型技术为中心的设计得到了长足的进步。STL就是这个阶段杰出的产物。STL的目标就是要把数据和算法分开,分别对其进行设计,之后通过一种名为iterator的东西,把这二者再粘接到一起。设计模式中,关于iterator的描述为:一种能够顺序访问容器中每个元素的方法,使用该方法不能暴露容器内部的表达方式。可以说,类型萃取技术就是为了要解决和iterator有关的问题的,下面,我们就来看看整个故事。应该说,迭代器就是一种智能指针,因此,它也就拥转载 2021-05-17 20:03:55 · 517 阅读 · 0 评论 -
一文搞懂C++的struct与union的区别
一、概念1.定义:结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体union: 使几个不同类型的变量共同占用一段内存。2.地址:struct和union都有内存对齐,结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。二、关于内存对齐,四个重要的基本概念:1.数据类型自身的对齐值:对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。2....转载 2021-03-04 23:05:00 · 1013 阅读 · 1 评论 -
C++服务编译原理分析
为了更好地理解编译优化方案,在介绍优化方案之前,我们先简单介绍一下编译原理,通常我们在进行C++开发时,编译的过程主要包含下面四个步骤:预处理器:宏定义替换,头文件展开,条件编译展开,删除注释。gcc -E选项可以得到预处理后的结果,扩展名为.i 或 .ii。 C/C++预处理不做任何语法检查,不仅是因为它不具备语法检查功能,也因为预处理命令不属于C/C++语句(这也是定义宏时不要加分号的原因),语法检查是编译器要做的事情。 预处理之后,得到的仅仅是真正的源代码。编译器:生成汇.原创 2021-01-07 15:49:01 · 183 阅读 · 0 评论 -
C++lock、unlock、lock_guard和condition_variable锁
lock、unlocklock()和unlock()函数必须同时成对存在,不存在一多一少的情况;lock()调用线程将锁住该互斥量;若该互斥量当前没有被锁住,则进行加锁; 若当前互斥量被其他线程锁住,则当前的调用线程被阻塞; 若当前互斥量被当前调用的线程锁住,则会产生死锁,因为同一个线程不允许锁两次;unlock()进行解锁操作,释放互斥量的所有权;#include <iostream>#include <thread>#include <m.原创 2020-11-18 16:08:27 · 2794 阅读 · 1 评论 -
LeetCode:硬币组合的最少个数
/*给您不同面额的硬币和总金额.编写一个函数来计算组成该数量所需的最少数量的硬币.如果这笔钱不能用硬币的任何组合弥补,则返回-1.Example 1:coins = [1, 2, 5], amount = 11return 3 (11 = 5 + 5 + 1)Example 2:coins = [2], amount = 3return -1.解题思路:递归算法不可取,会导致大量的数据重复计算。优先选择动态规划*/Go语言实现package mainimport.原创 2020-11-12 13:00:21 · 749 阅读 · 0 评论 -
深入理解C++之模板方法模式
/*模板方法模式概念:在一个方法中定义一个算法的骨架,然后将一些具体实现步骤延迟到子类中。模板方法使得子类可以不改变算法结构的情况下,重新定义算法中的某些步骤的实现。模板方法可以为程序员提供一种代码复用的重要技巧。因为模板方法的抽象类可以定义具体方法、抽象方法,并且该抽象方法由子类去实现。抽象类(AbstractClass):定义抽象的原语操作,具体的子类将重定义它们以实现一个算法,实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用原语操作,也调用定义具体子类(ConcreteClas.原创 2020-11-11 13:57:07 · 172 阅读 · 0 评论 -
C++指向子类的父类指针以及直接定义对象的权限
/*在继承中,使用指向对象的指针访问类成员时与使用对象直接访问类成员的访问权限和成员隐藏情况存在差异的。(1)使用对象直接访问成员时,继承来的子父类成员都可以访问,若子父类中有同名成员时,不管是否加了(virtual)关键词,子类一定覆盖父类。否则,只能是子类或父类自己定义的成员(2)使用指向子类的父类指针时,只可直接访问的是父类成员,基类成员函数前加virtual且子类中有同名函数时才会使用子类的该成员函数。该指针不能访问子类自己定义的成员。*/#include <iostre.原创 2020-11-11 10:06:54 · 480 阅读 · 0 评论 -
深入理解C++之适配器模式
/*华为手机mate40,你即可以使用UBS接口连接电脑来充电,假如只有mate40没有电脑,怎么办呢?华为提供了mate40电源适配器。可以使用这个电源适配器充电。这个mate40的电源适配器就是类似我们说的适配器模式。(电源适配器就是把电源变成需要的电压,也就是适配器的作用是使得一个东西适合另外一个东西。)在设计模式中,也存在这样一种类似的模式,存在两个接口不同的类,可以使用一个适配器类来将一个接口转换为客户希望的另外一个接口,称为适配器模式。*/#include <ios..原创 2020-11-09 18:06:29 · 293 阅读 · 0 评论 -
LeetCode:员工工资排序
/*题目描述:某公司中有N名员工。给定所有员工工资的清单,财务人员要按照特定的顺序排列员工的工资。他按照工资的频次降序排列。即给定清单中所有频次较高的工资将在频次较低的工资之前出现。如果相同数量的员工都有相同的工资,则将按照给定清单中该工资第一次出现的顺序排列。写一个算法来帮助财务人员排列员工工资的顺序。输入:该函数/方法的输入包括两个参数--num,一个整数,表示员工的人数salaries,一个正整数列表,表示N名员工的工资输出:返回一个正整数列表,该列表按照员工工资的频次排序.原创 2020-11-09 13:27:52 · 1174 阅读 · 0 评论 -
手撕LeetCode求区间的个数
/*题目描述:给定一个整数数组,返回区间和在[lower,upper]之间的个数,包含lower和upper,区间和S(i,j)表示在nums中,位置从i到j的元素之和,包含i和j(i=<j)。注意:最直观的时间复杂度是O(n^2),请在此基础上优化你的算法。示例:Input:nums=[-2,5,1],lower=-2,upper=2Output:3其中3个区间:[0,0],[2,2],[0,2]它们表示的和分别为:-2,-1,2解题思路:归并排序(1)求区间和,一般.原创 2020-11-08 11:20:23 · 270 阅读 · 0 评论 -
leetcode88题:合并两个有序的数组
/*题目描述:给定两个有序指定长度的数组,把两个数组合并为一个。示例:输入是两个数组和它们分别的长度m和n。其中第一个数组的长度被延长至m+n,多出的n位被0填充。题目要求把第二个数组归并到第一个数组上,不需要开辟额外的空间。Input:nums1=[1,2,3,0,0,0],m=3,num2=[2,5,6],n=3Output:nums1=[1,2,2,3,5,6]解题思路:因为这两个数组都排序好,可以设置两个指针,分别放在两个数组元素的末尾,即nums1的m-1位和nums2.原创 2020-11-07 19:25:39 · 224 阅读 · 0 评论 -
LeetCode167:给定和求一对解
/*题目描述:在一个增序的整数数组里面找到两个数,使得它们的和为给定值。已知有且只有一对解。示例:Input:numbers=[2,7,11,15],target=9Output:[1,2]解题思路:因为数组已经排序好,可以采用方向相反的双指针来寻找这两个元素,一个初始指向最小的元素,即数组最左边,向右遍历;一个初始指向最大的元素,即数组最右边,向左遍历。(1)若两个指针指向元素的和等于给定值,那么它们就是我们要的结果;(2)若两个指针指向元素的和小于给定值,则把左边的指针右移动一.原创 2020-11-07 12:25:18 · 98 阅读 · 0 评论 -
leetcode435:区间去掉不重叠
/*题目描述:给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。示例:输入是一个数组,数组由多个长度固定为2的数组组成,表示区间的开始和结尾,输出一个整数,表示需要移除的区间数量。Input:[[1,2],[2,4],[1,3]]Output:1在示例中,可以移除区间[1,3],使得剩余的区间[[1,2],[2,4]]互不重叠。解题思路:在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其他区间的空间就越大,就越能保留更多的区间。因此,.原创 2020-11-07 10:40:29 · 574 阅读 · 0 评论 -
leetcode孩子分糖果
/*题目描述:一群孩子站成一排,每一个孩子有自己的评分,现在需要给这些孩子发糖果,规则是如果一个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果,而且每一个孩子至少要有一个糖果,求解最少需要多少个糖果。示例:输入一个数组,表示孩子的评分,输出是最少糖果的数量。Input:[1,0,2]Output:5在这个样例中,最少的糖果分法是[2,1,2]解题思路:贪心算法,只需要两次遍历。把所有孩子的糖果数初始化为1;先从左往右遍历一遍,如果右边孩子的评分比左.原创 2020-11-06 21:14:15 · 453 阅读 · 0 评论 -
LeetCode孩子分配饼干
/*分配问题*//*题目描述:有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃最多一个饼干,且只有饼干的大小大于或等于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少个孩子可以吃饱。示例:输入两个数组,分别代表孩子的饥饿度和饼干的大小。输出最多有多少孩子可以吃饱的数量。Input:[1,2],[1,2,3]Output:2其中可以给这两个孩子喂[1,2],[1,3],[2,3]这样三种组合的任意一种。解题思路:因为饥饿度最小的孩子最容易吃饱。所以.原创 2020-11-06 20:19:02 · 1138 阅读 · 0 评论 -
LeetCode-148:对链表进行排序
给你链表的头结点head,请将其按升序排列,并返回排序后的链表。进阶:你可以在O(nlogn)时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例1:输入:head=[4,2,1,3] 输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]提示:链表中节点的数目在范围[0,5*104]内解题思路:可以使用递归解法,先分割链表,找到链表的中间节点逐个进行断开链表,然后开始合并.原创 2020-11-05 19:57:24 · 283 阅读 · 0 评论 -
LeetCode72-edit distance:动态规划
本文来源:公众号“涛哥依旧”,笔试面试题目-编辑距离/*给你两个单词word1和word2,请你计算出将word1换成word2所使用的最小操作数。你可以对一个单词进行如下三种操作:1.插入一个字符2.删除一个字符3.替换一个字符示例1:输入:word1=“horse”,word2=“ros”输出:3解释:horse->rorse(将‘h’替换为‘r’)rorse->rose(删除‘r’)rose->ros(‘e’)式例2:输入:word1=“i..原创 2020-10-31 19:53:08 · 113 阅读 · 0 评论 -
LeetCode 347:哈希表+桶排序
给定一个非空的整数数组,返回其中出现频率前k高的元素。例如:给定数组[1,1,1,2,2,3],其中k=2,则返回[1,2]注意:(1)可以假设给定的k总是合理的,1<=<=数组中不相同的元素个数(2)算法的时间复杂度必须优于o(nlogn),n是数组的大小解题思路:哈希表+桶排序(1)定义一个哈希表,然后数值元素作为哈希表的关键字first,哈希表的值作为关键字的个数,进行遍历;(2)将哈希表的关键字存在一个数组中,然后根据哈希表的值进行比较排序,按照降序排序;(...原创 2020-11-03 18:02:48 · 530 阅读 · 0 评论 -
LeetCode 34:二分搜索区间
题目描述:给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。(1)算法时间复杂度必须是O(logn)级别;(2)如果数组中不存在目标值,则返回[-1,-1];示例1:输入:nums=[5,7,7,8,8,10],target=8输出:[3,4]示例2:输入:nums=[5,7,7,8,8,10],target=6输出:[-1,-1]解题思路:利用二分搜索查找的思想,分别找到数组中target出现的left起始位置和.原创 2020-11-03 10:19:32 · 113 阅读 · 0 评论 -
LeetCode-876题:求链表的中间位置
/*给定具有头节点的非空单链表,返回链表的中间节点。如果有两个中间节点,则返回第二个中间节点。例如:输入:[1,2,3,4,5]输出:此列表中的节点3(序列化:[3,4,5])返回的节点的值为3.(该节点的判断序列化为[3,4,5])。请注意,我们返回了一个ListNode对象ans,这样:ans.val = 3,ans.next.val = 4,ans.next.next.val = 5,ans.next.next.next = NULL。输入:[1,2,3,4,5,6]输出:此列.原创 2020-10-30 20:45:05 · 217 阅读 · 0 评论 -
深入理解C++之Lambda表达式
本文选自于:https://www.cnblogs.com/dylan-liang/p/11523277.html,然后做了一些补充。一. 简介lambda 可以方便地定义和创建匿名函数。C++采用的时配对的方括号[ ]。实例如下:#include <iostream>using namespace std;int main(int argc,char* argv[]){ []{ cout<<"Hello,China!"<&l..转载 2020-10-30 12:38:38 · 230 阅读 · 0 评论 -
一文搞懂C++的explicit显式关键字
本文选自于:C++ explicit关键字详解https://blog.csdn.net/guoyunfei123/article/details/89003369首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:clas...转载 2020-10-30 11:01:19 · 69 阅读 · 0 评论 -
LeetCode-406题:身高重建队列
/*题目描述:假设打乱顺序的一群人站成一个队列。每个人由一个整数对(h,k)表示,其中h是这个人的身高,k是排在这个人前面而且身高大于或等于h的人数。编写一个算法来重建这个队列。示例:输入:[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]*//*思路:当两个人的高度h相同时,k比较大的往后排;两个人高度不同时,“个子矮的”对于个子高的来说是不可见的,默认人数为0;所以先根据高度(降..原创 2020-10-29 21:44:16 · 133 阅读 · 0 评论 -
vector容器存储的元素是类的对象和指针的差异
参考资料:1.https://blog.csdn.net/luomoshusheng/article/details/482265172.https://blog.csdn.net/wangshubo1989/article/details/49913239(妙得很)3.https://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html贴两段代码防忘记:当存储类对象的指针时,析构和结构的过程分析:#...转载 2020-10-22 20:00:46 · 1590 阅读 · 1 评论 -
unique_ptr、shared_ptr智能指针与STL容器的陷阱
unique_ptr智能指针与shared_ptr不同,unique_ptr没有定义类似make_shared的操作,因此只可以使用new来分配内存,而且由于unique_ptr不可以进行拷贝和赋值操作,初始化unique_ptr必须使用直接初始化的方式。unique_ptr<int> a(new int()); //成功,直接初始化unique_ptr<int> b=new int(); //失败! 构造函数是explicitunique_ptr<in原创 2020-10-22 19:02:11 · 2075 阅读 · 8 评论 -
深入理解(&)左值引用和(&&)右值引用
左值与右值左值是指既能出现在等号左边也能出现在等号右边的变量(或表达式),右值则只能出现在等号右边返回左值引用的函数,连同赋值、下标、解引用和前置递增/递减运算符,都是返回左值的表达式返回非引用类型/右值引用的函数,连同算术、关系、位以及后置递增/递减运算符,都返回右值的表达式左值持久,右值短暂,左值有持久的状态,而右值要么是字面常量,要么是在表达式求值过程中创建的临时对象(将要被销毁的对象)。引用引用是给一个存在的对象定义的别名,一个变量可以有多个引用,引用必须初始化,引用只能在初始化转载 2020-10-22 18:22:11 · 2562 阅读 · 0 评论 -
static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别
static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别static_cast基础类型之间互转。如:float转成int、int转成unsigned int等; 指针与void*之间互转。如:float*转成void*、CBase*转成void*、函数指针转成void*、void*转成CBase*等; 派生类指针【引用】转成基类指针【引用】。如:Derive*转成Base*、Derive&转成Base&等;转载 2020-10-11 15:48:10 · 600 阅读 · 0 评论 -
深入理解C++构造函数初始化列表与赋值
在C++中类成员变量的初始化有以下两种方式:构造函数初始化列表; 构造函数体内赋值;内部数据类型形如char,int,float…指针等class Animal{public: Animal(int weight,int height): //A初始化列表 m_weight(weight), m_height(height) { } Animal(int weight,int height) ...原创 2020-10-11 13:58:53 · 8583 阅读 · 3 评论 -
一文搞懂共享锁、排他锁、悲观锁、乐观锁、行锁、表锁
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。共享锁(S锁)共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。 如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。排他锁(X锁)用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。 如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁.转载 2020-10-10 20:25:12 · 2409 阅读 · 0 评论 -
Mysql三大日志-binlog、redo log和undo log
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。binlogbinlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的mysql数据库都会记转载 2020-10-10 13:33:12 · 79 阅读 · 0 评论 -
一文搞懂面试中的mysql事务和锁
众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点。本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解。本文主要内容是根据掘金小册《从根儿上理解 MySQL》整理而来。如想详细了解,建议购买掘金小册阅读。什么是事务在维基百科中,对事务的定义是:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务的四大特性事务包含四大特性,即原子性(Atomicity)、一致性(Consis转载 2020-10-10 13:02:51 · 232 阅读 · 0 评论 -
模板类成员变量的构造函数的初始化
在C++类中,形如int型变量没有带参数的初始化默认是0,float k = 0;float = float();float tmp = float(0); // 这是 (显示转换)explicit cast以上代码都是等价的。在C++为非类类型(non-class type,或称原生类型),这里的意思是提供的缺省构造函数(deconstructor),就方便处理模板参数。template<typename T>class solution{public:原创 2020-10-10 09:47:35 · 1658 阅读 · 0 评论 -
一文搞定基址寄存器、界限寄存器、静态重定位与动态重定位
地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享它们的地址空间外)。给每个程序一个自己的地址空间,使得一个程序中的地址28所对应的物理地址与另一个程序中的地址28所对应的物理地址不同。方法:基址寄存器与界限寄存器使用一种简单的动态重定位,把每个进程的地址空间映射到物理内存的不同部分。当使用基址寄存器和界限寄存器时,程序装载到内存中连续的空闲位置且装载期间无须重定位,如图3-2c所示。当一.转载 2020-10-09 10:29:32 · 7434 阅读 · 2 评论