![]() |
1
5
一个程序的内存使用量不是该程序所用语言的函数。您可以在C#中编写占用大量内存的代码,在C中也可以这样做。 也就是说,我将试着回答你的一些问题:
在某些架构上可能是这样,但不一定是这样。在Windows上(使用可移植可执行文件格式),它们没有任何关联,可以映射到完全不同的任意位置。事实上,最新的体系结构很可能不是这种情况,它不鼓励将代码放在数据所在的位置(出于安全目的,您不希望允许缓冲区溢出来覆盖程序代码)
在现代处理器中,内存和地址空间混淆了。事物的地址位置通常与它们的物理存储位置关系不大。维基百科关于 Virtual Memory 可能会让事情对你更有意义。祝你好运!
现代处理器使用平面内存模型。访问任何一个地址和访问任何其他地址一样容易。 事实并非如此(好吧,在很大程度上,它可能会改变的原因是一整罐蠕虫本身)。要访问全局,代码本身需要知道 基址
是的,存在控制堆栈的保留大小和提交大小的设置。因为在Windows上可以安全地处理堆栈溢出,所以通常堆栈只有1mb;在*nix机器上通常是8MB或更多。
您可以阅读PE规范: http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx
|
![]() |
2
0
在典型的虚拟内存现代系统中,程序的地址空间通常由以下部分组成:
动态库有自己的代码和数据段,动态链接器(GOT,PLT,…),调试器。。。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 3 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |