String 操作系统如何检测数字和字符串?
如果我们有一个字符串String 操作系统如何检测数字和字符串?,string,memory-management,operating-system,numbers,String,Memory Management,Operating System,Numbers,如果我们有一个字符串“a”和一个数字65,因为它们在内存中看起来是相同的,那么操作系统如何知道哪个是字符串,哪个是数字 另一个问题——假设一个程序分配了一些内存(比如,一个字节)。操作系统如何记住在哪里分配了内存 “OS”应用了一种算法,它看起来像:“如果字符串中的每个字符都是一个数字,那么字符串就是一个数字”,并且对于小数、+/-等变得更加复杂 ! 对于计算机来说,字符串是一个数字。最简单的例子是ASCII表,其中每个字母都附有一个数字。因此,如果您熟悉C,您可以编写printf(“%C”,0
“a”
和一个数字65,因为它们在内存中看起来是相同的,那么操作系统如何知道哪个是字符串,哪个是数字
另一个问题——假设一个程序分配了一些内存(比如,一个字节)。操作系统如何记住在哪里分配了内存
printf(“%C”,0x65)
并实际获得一个a
而不是数字。希望这是有道理的第2条-系统保留(某个进程的)所有分配的记录,因此可以在进程终止时删除这些分配。我建议你读一本关于操作系统原理的书(例如Tanenbaum的“现代操作系统”)。这些细节都不是操作系统所能处理的。它们由用户程序处理 对于第一个问题,在内存中,字符“A”和数值65之间绝对没有区别(当然,假设您只查看一个字节的数据)。当您看到程序如何解释这些位时,就会出现差异。例如,如果用户程序试图将字符串打印到屏幕上,它可能会对操作系统进行一些系统调用,要求操作系统打印字符。在这种情况下,操作系统中的代码由一系列汇编指令组成,用于在显示设备中的某个位置复制这些位。然后,显示器的任务是渲染一组适当的像素以绘制字符“a”。换句话说,程序从来没有“知道”过该值是“a”。相反,硬件只是围绕着控制另一段代码的位进行操作,该代码最终负责将这些位转换为像素 对于第二个问题,这实际上取决于内存管理器。一个程序有很多方法来分配内存并知道它存储在哪里。我不确定我是否完全理解你的问题,但我相信这个答案应该足够了:
你的#1没有多大意义。@pyroscope-我认为这实际上是一个非常合理的问题。当一天结束时,所有变量看起来都一样时,计算机如何知道将不同的变量视为具有不同的类型并不明显。这不是更像是操作系统分配了一块内存(例如虚拟内存)吗对于一个进程,如何处理它而不是操作系统记录分配取决于该进程?这里有几个管理层,虚拟内存映射是OS中的某种东西(sbrk in*nix),而给定给进程的页面则由应用程序使用的任何东西(例如,某种形式的malloc或Java GC)来处理.谢谢,有什么好的资源可以解释吗!我真的很感激你的回答!