当前位置:首页 > 单片机 > 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
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

芯片巨头高通的股价应声暴跌超 8%。这一跌幅的背后,表面看是公司发布的远低于市场预期的业绩指引,而核心诱因直指席卷行业的内存芯片短缺危机。

关键字: 内存 消费电子 高通

1月18日,美国商务部部长霍华德・卢特尼克(Howard Lutnick)在美光纽约工厂奠基仪式上的表态,为本已沸腾的全球内存市场投下又一颗 “炸弹”:存储芯片制造商若不选择在美国本土建厂,将面临高达 100% 的惩罚性...

关键字: 内存 存储 AI算力

1月15日消息,硬件市场正在上演一场荒诞的“文艺复兴”,由于DDR5与DDR4内存价格持续飙升,原本早已淡出主流视线的DDR3平台竟然翻红。

关键字: 内存 DDR5

1月13日消息,随着近期全球内存市场价格的飙涨,坐拥三星和SK海力士的韩国内存价格却近乎有些疯狂。

关键字: 内存 DDR5

1月7日消息,今日,市场研究机构Counterpoint Research发布最新行业报告指出,内存市场已进入“超级牛市”阶段,当前行情甚至已超越2018年的历史高点。

关键字: 内存 DDR5

1月5日消息,自2025年秋季以来,PC内存价格大幅上涨,整个行业风声鹤唳。

关键字: 内存 DDR5

ATYM是一个轻量级的运行时,用于在Linux边缘设备(如树莓派)上运行WebAssembly应用程序。ATYM不是在系统上部署大型Docker映像或直接运行本机二进制文件,而是运行小型的沙盒程序,这些程序启动速度快,使...

关键字: 树莓派 ATYM Linux 内存

在Java应用性能调优的实践中,堆外内存(Off-Heap Memory)的管理始终是一块难啃的硬骨头。 当多数开发者将注意力集中在堆内内存的GC优化时,堆外内存的异常增长往往成为压垮应用的最后一根稻草。

关键字: 内存 Java

中国北京(2025年12月18日)—— 业界领先的半导体器件供应商兆易创新GigaDevice(股票代码 603986)今日宣布,正式推出GD32H78D/77D系列高性能32位通用微控制器,产品基于高性能Arm® Co...

关键字: 算力 MCU 内存

12月16日消息,内存、硬盘价格一路飙升,全世界都一样。

关键字: 内存 DDR5
关闭