c - 是否可以使用 C 语言访问 DRAM 位单元?

标签 c memory memory-leaks

如果这不是问这个问题的地方,我深表歉意。我想知道 C 编程语言是否允许用户访问 DRAM 位单元,我似乎无法在网上找到任何专门回答我的问题的资源,所以我更倾向于认为这是不可能的。谢谢

最佳答案

C 没有给出任何针对标准硬件平台直接读取 DRAM 的具体方法:Windows、Linux 等。 但是,这对于某些嵌入式平台是可能的,并且在很大程度上取决于操作系统、内核或系统核心的任何内容。

不属于具有虚拟内存的操作系统且具有直接内存访问权限的嵌入式系统显然可以并且确实可以访问内存。

有些系统具有 DMA,顾名思义,它允许直接内存访问。对于 DMA,您必须有一段代码来对 DMA 进行编程,并指示它从远程存储器(在本例中为 DRAM)的某些部分读取或写入某些数据。

如果硬件架构支持,则可以直接访问 DRAM,但目前这种情况并不常见,因为人们认为 DRAM 访问可能会减慢处理器的速度。这就是使用 DMA 的原因,以减轻主处理器访问外部存储器的枯燥乏味的任务。

例如,请看下面测试内存的代码的描述,最主要的是代码可以直接“看到”DRAM内存: https://www.akkadia.org/drepper/cpumemory.pdf

要了解有关内存、内存类型以及如何访问内存的更多信息,请阅读此处的精彩文章: https://barrgroup.com/Embedded-Systems/How-To/Memory-Test-Suite-C

我希望这能回答您的问题,或者至少可以帮助您了解访问 DRAM 所涉及的内容。简单来说,一般系统上OS都是访问DRAM的,除非系统设计成这样,可以直接通过地址访问DRAM。

关于c - 是否可以使用 C 语言访问 DRAM 位单元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48189791/

相关文章:

c++ - 使数组更节省内存

c# - 如何在 Visual Studio 中读取内存快照

c++ - Win32 API - 将 LO/HIWORD 转换为 HANDLE

c - log4c - 我怎样才能只看到信息消息?

c - 父进程在子进程之前执行,如何通过信号量强制相反?

c# - CLR/从32位进程切换到64位进程后内存消耗高

ios - 从CMSampleBufferRef创建UIImage时,iOS内存增加

c - 编译 HTK 时出现 "fatal error: bits/libc-header-start.h: No such file or directory"

c - 命令行参数和结构体参数

java - Android Libgdx 无法为 1536000KB 对象堆保留足够的空间