[求助]加载系统DLL会占用进程多大内存

lvgame 2006-12-14 05:03:09
加载一个系统DLL,映射到进程空间的是什么?

加载的系统DLL,会占用进程多少内存?

动态和静态加载有区别吗?

谢谢。
...全文
431 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
firePhoenix1981 2006-12-14
  • 打赏
  • 举报
回复
动态加载dll并不会占用你的进程的内存,因为代码是共享的。静态加载的话,由于你的进程会单独占用一份你调用的函数的代码,所以他会占用你的内存,具体大小应该取决于被你调用的过程。如何统计的话,不了解这方面
yjgx007 2006-12-14
  • 打赏
  • 举报
回复
如果你想统计某个dll的占用内存, 试着调用ImageDirectoryEntryToDataEx获得所有段的大小,进行累加,第一个参数是dll模块句柄(作为起始地址)
yjgx007 2006-12-14
  • 打赏
  • 举报
回复
user32.dll, kernel32.dll, gdi32.dll只会映射到你的进程地址空间,本身并不再消耗一份物理内存.
统计它干嘛?
lvgame 2006-12-14
  • 打赏
  • 举报
回复
to akirya(坏[其实偶不是什么所谓的坏人]) :

对,我的意思就是这类DLL对我进程占用的内存大小会有多大影响?现在想统计下这部分的值。
  • 打赏
  • 举报
回复
系统dll?
user32.dll之类的么?
这个不需要占内存的,只会占一份内存空间的
ben_jiang 2006-12-14
  • 打赏
  • 举报
回复
进程空间是系统安排 , 占用内存大小,根据DLL 所做的内容,当然,至少>= 自身大小

动态和静态加载 对于自身进程来说,莫得啥子区别, 对于操作系统可不一样,当然,在动态加载中,最好不要频烦加载同一个库
lvgame 2006-12-14
  • 打赏
  • 举报
回复
谢谢楼上两位

我的问题不是如何load DLL,而是想知道对于系统DLL,也就是已经在内存中映射的,如果我的程序去加载,那这个DLL会如何映射到我的程序的进程空间里?

我主要是想知道,进程占用的内存中有多少是因为加载系统DLL造成的。
kouzhongling 2006-12-14
  • 打赏
  • 举报
回复
32位4G空间低端2G被系统使用大部分是dll
一个dll如果有程序要用的话 内存中只有一份dll的拷贝
但它能被多个进程共享
它可以映射到不同进程的不同虚地址
xuzheng318 2006-12-14
  • 打赏
  • 举报
回复
LIB文件是一个导入库。客户程序要使用DLL,只有导出声明还不够,这样
并不能使客户联接到DLL。客户的工程必须对链接程序指定LIB文件。这种
方式叫隐式链接。我们还可以用显式链接:调用LoadLibray函数,指定dll
路径。再用GetProcAdress就可以得到你想要调用得函数得地址了

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧