当前位置:  技术问答>linux和unix

C++ 内存管理, 链接脚本, 链接and加载

    来源: 互联网  发布时间:2017-05-12

    本文导语:  刚刚开始学习内存管理的小鸟一枚,请过来人指教。下面是我的理解,不当之处还请指正 使用C++写的每一个程序,在编译连接后,将它加载到内存执行,在这一流程上内存的命名及变化。 在程序没有加载到内存时...

刚刚开始学习内存管理的小鸟一枚,请过来人指教。下面是我的理解,不当之处还请指正

使用C++写的每一个程序,在编译连接后,将它加载到内存执行,在这一流程上内存的命名及变化。

在程序没有加载到内存时候,我们根本不知道这个程序要使用内存的那一片地址,
这决定于操作系统加载程序的时候已经运行了多少个程序,以及操作系统本身。

首先从编译说起,
编译时候,要将代码符号便以为汇编代码,这就会有寻址,
这个时候的寻址空间是整个内存空间,(如果是32为地址空间,寻址大小为4G)。我理解为这是逻辑地址,
或是相对地址。

再说链接,在地址层面上来说,就是将地址空间统一起来,
在一个地址空间内将所有目标文件的数据和命令进行编址。
这时候的可执行文件内寻址大小依然是整个内存空间大小。

再说加载,
操作系统将可执行文件加载到内存,可能将某一片地址分配给这个进程使用。
具体这一片地址是多大,我还不知道怎么设置,在哪里设置,该如何设置。
所以在可执行文件的地址最终会被OS映射到具体的物理地址的。
也就是在可执行文件中访问的a-b的地址,最终会被OS映射到真实物理地址C-D上。
但是他们的大小是一样的。
在可执行文件中地址的划分是在链接脚本中控制的。
可以规定代码段大小,位置,数据段大小位置等。

------------------------------------------------
            以上是本人理解的,
            接下来看看如何在程序中使用自己的内存管理模块。
------------------------------------------------

比如说我的某一块板子的内存有2G,
我只有一个服务程序要在这个板子上跑,使用linux系统。
那么我可以在链接脚本中规定SECTION的信息。
在链接脚本中规定堆地址从0x19000000-0x49000000
那么在代码中可以直接使用自己的内存管理模块对0x19000000-
0x49000000这一块内存进行操作。
比如重写new opearator,
申请内存时候,就从这一地址空间中申请,当然OS会将这一地址空间映射到真是物理地址。

不知道自己这样理解是不是正确,错误之处还请指正。

Thanks and Regards。




|
信息量好大呀,从编译--操作系统  可以写好几本书。


|
来学习了

    
 
 

您可能感兴趣的文章:

  • C++ Vectors 成员 get_allocator():返回vector的内存分配器
  • C++里能不能在指定的一块内存中创建对象的实例?
  • java开发知识 iis7站长之家
  • 内存外部计算的C++标准库 STXXL
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • C++内存管理库 Generic Memory Manager
  • C++程序的内存不同的数据段及堆栈布局
  • 请教一个linux c++调试问题(关于内存泄露)
  • 请教:在solaris下测试C++程序是否存在内存泄漏等问题用什么测试工具?
  • linux下c++对长度不定的字符串要进行预先动态分配内存需要怎么做?
  • C++中给二维指针分配内存(实现代码)
  • linux下C++动态malloc申请内存出现问题,高人指点一下,在线
  • 基于C++执行内存memcpy效率测试的分析
  • c++动态内存空间示例(自定义空间类型大小和空间长度)
  • 基于C++中常见内存错误的总结
  • C++内存查找实例
  • 深入解析C++ Data Member内存布局
  • 基于C++内存分配、函数调用与返回值的深入分析
  • C++内存泄漏及检测工具详解
  • c++实现逐行读取配置文件写入内存的示例
  • C++中关于Crt的内存泄漏检测的分析介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 大家好,我想问下有人用过"linux进程的内存使用解析"中推荐使用的"Ben Maurer写的perl脚本"查看内存么
  • 二台配置heartbeat机器如何启动一个监控内存的脚本呢
  • 急!!!AIX上监控CPU和内存使用率的脚本
  • 用来查看linux内存使用情况的shell脚本
  • linux系统使用python获取内存使用信息脚本分享
  • 牛人来帮忙解析一个shell脚本(用于统计一个进程的内存使用情况)
  • 统计 cpu 内存 使用率的shell脚本代码
  • 一个用了统计CPU 内存 硬盘 使用率的shell脚本
  • shell脚本监控linux系统内存使用情况的方法(不使用nagios监控linux)
  • 使用shell脚本采集系统cpu、内存、磁盘、网络等信息
  • C/C++内存池实现介绍及基本要求
  • 我的机器内存128 ,安装redhat9 后,可用内存很少了,如何节省内存呢?
  • linux下free命令显示的内存使用情况分析
  • 奇闻:Apache+Apache JServ 1.1.1+1G内存居然报内存不够,那位高友知道参数设置,把俺的1G内存都利用起来,感激不尽啊
  • c/c++内存堆分配和栈分配理解
  • 怎样读取指定内存地址处指定长度的内存数据???(
  • Ubuntu查看内存,进程相关命令介绍
  • 【操作系统虚拟内存和物理内存疑惑】
  • Linux 共享内存介绍及实现代码
  • 请教一个关于内存分配的问题(系统和DMA共享一块物理内存空间)
  • Linux内存文件系统(ramdisk)的三种实现方式
  • Solaris下如何获得物理内存和虚拟内存的大小?
  • Microsoft IE MSHTML内存破坏远程代码执行漏洞
  • 程序需要共享内存相当大,但是系统的内存有限
  • Microsoft Internet Explorer内存破坏漏洞(CNVD-2013-13096)
  • 关于大于2G内存的使用.....按32位编译的进程怎么使用大于2G的内存?
  • linux下进程占用内存空间详解
  • redhat9内存使用率高达73%,怎么查看内存具体使用情况
  • c/c++服务器程序内存泄露问题分析及解决
  • 遇到奇怪的内存泄露问题,应用程序杀死内存无法释放!
  • linux内存文件系统ramfs实现原理


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,