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

标签 string memory-management operating-system numbers

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

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

最佳答案

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

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

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

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

  2. 在程序级别,大多数程序都包含一个内存管理器,这是一段代码,其任务是分配并将大块内存分成较小的部分,然后供程序使用程序。这通常将分配的内存作为“ block ”列表进行跟踪,其中每个内存块都被视为元素的双向链接列表。每个 block 通常都注释有信息,表明它正在使用中以及 block 有多大,这允许内存管理器在释放内存后回收内存。

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

希望这有帮助!

关于string - 操作系统如何检测数字和字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903819/

相关文章:

linux - 设备的内存映射 IO 地址是否映射到进程的内核空间?

xcode - Xcode (mac) 上的图形故障

C++ - 如何在字符串中查找(可变)字符?

C 对齐特定用例的字符串文字

c# - 在 C# 项目中将 C# 字符串转换为 MFC CString?

python - 将列表中的字符串加在一起

c - 数组大小应该在编译时已知

ios - 克隆 UIImage iOS 部分时的内存问题

objective-c - 为什么在 Objective-C 库中使用 ARC 时会出现警告?

java - 获取指定文件路径的file.separator