操作系统如何检测数字和字符串?

时间:2011-08-01 20:06:29

标签: string memory-management operating-system numbers

如果我们有一个字符串"A"和一个数字65,因为它们在内存中看起来相同,操作系统如何知道哪个是字符串,哪个是数字?

另一个问题 - 假设程序分配一些内存(比如一个字节)。操作系统如何记住分配内存的位置?

5 个答案:

答案 0 :(得分:3)

这些细节都不是由操作系统处理的。它们由用户程序处理。

对于你的第一个问题,内存在内存中,字符'A'和数值65之间绝对没有区别(当然,假设您只是查看一个字节的数据)。当您看到程序如何解释这些位时会出现差异。例如,如果用户程序尝试将字符串打印到屏幕,则可能会向OS发出一些系统调用,要求操作系统打印该字符。在这种情况下,OS中的代码由一系列汇编指令组成,用于在显示设备中的某处复制这些位。然后,显示器的任务是渲染一组适当的像素以绘制角色“A”。换句话说,程序从未“知道”该值是“A”。相反,硬件只是推动控制另一段代码的位,这些代码最终负责将这些位转换为像素。

对于第二个问题,这实际上取决于内存管理器。程序有很多种方式来分配内存并知道它的存储位置。我不完全确定我明白你在问什么,但我相信这个答案应该足够了:

  1. 在操作系统级别,操作系统内核甚至不知道该字节已分配。相反,操作系统只是为用户程序分配巨大的内存块,以便在运行时使用。当程序终止时,回收所有内存。

  2. 在程序级别,大多数程序都包含一个内存管理器,一段代码,负责将大块内存分配并分割成更小的内存,然后由程序。这通常将分配的内存跟踪为“块”列表,其中每个内存块被视为双向链接的元素列表。每个块通常都带有注释信息,表明它正在使用中以及块的大小,这使得内存管理器一旦被释放就可以回收内存。

  3. 在用户代码级别,当您要求内存时,通常将其存储在指针中以跟踪内存的位置。这只是存储地址的一系列字节,操作系统和内存管理器除非另有指示,否则不会查看。

  4. 希望这有帮助!

答案 1 :(得分:1)

没有。 2 - 系统记录所有分配(某个过程的分配),因此可以删除它们,例如当进程终止时我建议你读一本关于操作系统原理的书(例如Tanenbaum的“现代操作系统”)。

答案 2 :(得分:1)

  1. 字符“A”和整数65以相同的方式存储在内存中(至少在32位系统上)。然而,字符串“A”以不同方式存储,并且可以取决于系统或编程语言。以C为例,它将存储字符串本质上作为字符数组,后跟空字符。

  2. 操作系统使用内存管理器来跟踪哪个进程正在使用哪些内存部分。

答案 3 :(得分:0)

  1. 对于计算机,字符串是数字。最简单的例子是ASCII表,其中每个字母都附有一个数字。因此,如果您熟悉C,则可以编写printf("%c", 0x65)并实际获得A而不是数字。希望有意义。

  2. 操作系统不记得程序分配的内存位置。这就是pointers的用途!

答案 4 :(得分:-1)

  1. 'OS'应用一种算法,它看起来像:“如果字符串中的每个字符都是一个数字,那么字符串就是一个数字”,并且对于小数,+ / - 等更复杂! / LI>
  2. http://en.wikipedia.org/wiki/Dynamic_memory_allocation <!/ LI>