当前位置:首页 > 单片机 > CPP开发者
[导读]通过/proc文件系统探究虚拟内存我们会通过/proc文件系统找到正在运行的进程的字符串所在的虚拟内存地址,并通过更改此内存地址的内容来更改字符串内容,使你更深入了解虚拟内存这个概念!这之前先介绍下虚拟内存的定义!虚拟内存虚拟内存是一种实现在计算机软硬件之间的内存管理技术,它将程...


通过/proc文件系统探究虚拟内存

我们会通过/proc文件系统找到正在运行的进程的字符串所在的虚拟内存地址,并通过更改此内存地址的内容来更改字符串内容,使你更深入了解虚拟内存这个概念!这之前先介绍下虚拟内存的定义!

虚拟内存

虚拟内存是一种实现在计算机软硬件之间的内存管理技术,它将程序使用到的内存地址(虚拟地址)映射到计算机内存中的物理地址,虚拟内存使得应用程序从繁琐的管理内存空间任务中解放出来,提高了内存隔离带来的安全性,虚拟内存地址通常是连续的地址空间,由操作系统的内存管理模块控制,在触发缺页中断时利用分页技术将实际的物理内存分配给虚拟内存,而且64位机器虚拟内存的空间大小远超出实际物理内存的大小,使得进程可以使用比物理内存大小更多的内存空间。


在深入研究虚拟内存前,有几个关键点:

  • 每个进程都有它自己的虚拟内存

  • 虚拟内存的大小取决于系统的体系结构

  • 不同操作管理有着不同的管理虚拟内存的方式,但大多数操作系统的虚拟内存结构如下图:

virtual_memory.png

上图并不是特别详细的内存管理图,高地址其实还有内核空间等等,但这不是这篇文章的主题。从图中可以看到高地址存储着命令行参数和环境变量,之后是栈空间、堆空间和可执行程序,其中栈空间向下延申,堆空间向上增长,堆空间需要使用malloc分配,是动态分配的内存的一部分。


首先通过一个简单的C程序探究虚拟内存。

#include 
#include 
#include 

/**
 * main - 使用strdup创建一个字符串的拷贝,strdup内部会使用malloc分配空间,
 * 返回新空间的地址,这段地址空间需要外部自行使用free释放
 *
 * Return: EXIT_FAILURE if malloc failed. Otherwise EXIT_SUCCESS
 */
int main(void)
{
    char *s;

    s = strdup("test_memory");
    if (s == NULL)
    {
        fprintf(stderr, "Can't allocate mem with malloc\n");
        return (EXIT_FAILURE);
    }
    printf("%p\n", (void *)s);
    return (EXIT_SUCCESS);
}

编译运行:gcc -Wall -Wextra -pedantic -Werror main.c -o test; ./test
输出:0x88f010
我的机器是64位机器,进程的虚拟内存高地址为0xffffffffffffffff, 低地址为0x0,而0x88f010远小于0xffffffffffffffff,因此大概可以推断出被复制的字符串的地址(堆地址)是在内存低地址附近,具体可以通过/proc文件系统验证.
ls /proc目录可以看到好多文件,这里主要关注/proc/[pid]/mem和/proc/[pid]/maps

mem
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

北京2026年5月12日 /美通社/ -- 近日,中国移动年度盛会--2026移动云大会在苏州隆重召开。本届大会以"移动云 智能新空间"为主题,聚焦AI、算力、Tokens应用,共探智能转型与算力融合...

关键字: 移动 AI 指令集 内存

在系统编程与底层开发领域,结构体作为一种复合数据类型,是构建复杂数据模型的核心工具。然而,结构体的内存布局并非简单的字段大小叠加,其实际占用空间受数据对齐、编译器优化、语言特性等多重因素影响。错误估算结构体大小不仅会导致...

关键字: 编译器 内存

在Linux系统的运维与优化工作中,内存管理始终是核心环节。理解内存、Swap、Cache和Buffer的作用与运行机制,不仅能帮助我们准确判断系统资源状态,更是实现性能调优的关键。

关键字: Linux系统 内存

RK3506 本身就是为低成本、高性价比设计的方案,板级内存和 NAND 容量都不会给得太奢侈。在这种资源有限的平台上,Qt 方案过于臃肿,一个基础界面就能把内存占掉一大截,再叠上业务逻辑和后台服务,压力直接拉满。很多低...

关键字: 内存 NAND 开发板

北京2026年4月23日 /美通社/ -- 摘要:上海开赟数字技术有限公司(下文简称开赟)联手IBM,基于IBM Spectrum LSF(下文简称LSF)高性能作业调度和资源管理平台,针对内存资源优化,推出了一套 &q...

关键字: IBM 内存 PC HP

全球电子协会最新报告指出,人工智能需求正重新分配内存供应,导致电子制造企业成本上升、交付周期延长

关键字: AI驱动 内存 电子制造

北京2026年4月3日 /美通社/ -- 4月2日,浪潮信息直播发布业界首个企业级OpenClaw方案——「企千虾」,为企业规模化部署、管理和应用OpenClaw,打造了安全、高效、易用的全链路方案。实操演示了「企千虾」...

关键字: OPENCL TOKEN AI 内存

3月24日消息,近日,摩根士丹利发布的最新智能手机市场研究报告指出,2026年安卓手机出货量同比降幅或将达到15%,而iPhone出货量降幅仅约2%受影响较小。

关键字: 内存 DDR5
关闭