【发布时间】:2013-11-08 05:51:53
【问题描述】:
根据我的理解,C/C++ 程序在内存中看起来是这样的:
我想知道以下内容:
- 我可以访问正在运行的程序的“文本部分”吗?通过访问我的意思是打印 开始和结束地址并检查内容。
- 我可以在运行时将“文本部分”重新定位到内存中的其他地址吗?
谢谢,
【问题讨论】:
-
如果你想要一个特定的功能,你可以直接访问它的指针来读取和复制到另一个空间。请注意,将代码作为数据处理会对性能产生巨大影响。
-
为什么你到底要问什么? 你想做什么,真的吗?
-
@BasileStarynkevitch 实际上,我想计算从节点访问代码的影响,而不是在 NUMA 机器上运行当前程序的节点。我知道还有其他选择,但很好奇是否可以访问文本部分并在运行时将其修改为指向其他地址。
-
好吧,处理器有缓存,所以影响(对于经常使用的热代码)应该不会很大。即使没有 NUMA,缓存未命中也会产生巨大的成本(这对于很少使用的 cold 代码很重要)。 NUMA 系统有一个复杂的 MMU(代码在虚拟内存中!)。所以热代码总是“在当前节点上”。不要太在意代码,要在意数据!
标签: c++ c linux memory-management elf