c*******h 发帖数: 1096 | |
x****u 发帖数: 44466 | 2 这是OS的功能,不是编程语言能控制的。
【在 c*******h 的大作中提到】 : 查看当前程序用了多少内存?
|
D*******a 发帖数: 3688 | 3 malloc_stat() for linux
【在 c*******h 的大作中提到】 : 查看当前程序用了多少内存?
|
c*******h 发帖数: 1096 | 4 试过getrusage,但是malloc前和malloc后的maxrss是一样的,不知问题在哪
试过valgrind,但是只能在一定频率的time_unit取到信息,没办法在任意语
句执行后取到信息
试过读/proc/self/stat,但是换到cluster上跑程序的时侯stat文件跟单机的
stat问题看着不一样,一堆数字不知道哪个才是我要的
有人也提议过重载new,自己算内存的实用。但是我还要用别人的library,
不可能把别人的code也重载一遍
苍天啊大地啊,谁告诉我一个work的方法吧
【在 c*******h 的大作中提到】 : 查看当前程序用了多少内存?
|
t****t 发帖数: 6806 | 5 getrusage will give the memory size allocated by OS. not each malloc will
allocate memory from OS, that would be too slow. /proc/self/stat should be
the same as getrusage. your required information should be in glibc, so
check glibc document.
【在 c*******h 的大作中提到】 : 试过getrusage,但是malloc前和malloc后的maxrss是一样的,不知问题在哪 : 试过valgrind,但是只能在一定频率的time_unit取到信息,没办法在任意语 : 句执行后取到信息 : 试过读/proc/self/stat,但是换到cluster上跑程序的时侯stat文件跟单机的 : stat问题看着不一样,一堆数字不知道哪个才是我要的 : 有人也提议过重载new,自己算内存的实用。但是我还要用别人的library, : 不可能把别人的code也重载一遍 : 苍天啊大地啊,谁告诉我一个work的方法吧
|
c*******h 发帖数: 1096 | 6 我man了一下proc,知道了所有/proc/self/stat里面44个数字的意思
里面有一个vsize,应该是我要的
stat里面还有一个项,是rss,跟getrusage里面的maxrss不一样
【在 t****t 的大作中提到】 : getrusage will give the memory size allocated by OS. not each malloc will : allocate memory from OS, that would be too slow. /proc/self/stat should be : the same as getrusage. your required information should be in glibc, so : check glibc document.
|
t****t 发帖数: 6806 | 7 vsize or rss doesn't reflect how much memory is allocated but not malloc()'
ed. again, it is impossible for OS has any idea on how much memory you
malloc()'ed. if anyone knows, it must be glibc. it's useless to look into /
proc.
【在 c*******h 的大作中提到】 : 我man了一下proc,知道了所有/proc/self/stat里面44个数字的意思 : 里面有一个vsize,应该是我要的 : stat里面还有一个项,是rss,跟getrusage里面的maxrss不一样
|
c*******h 发帖数: 1096 | 8 呃,我要的不只是heap上,还包括stack里的。。。可能最开始我没说清楚吧
【在 t****t 的大作中提到】 : vsize or rss doesn't reflect how much memory is allocated but not malloc()' : ed. again, it is impossible for OS has any idea on how much memory you : malloc()'ed. if anyone knows, it must be glibc. it's useless to look into / : proc.
|
t****t 发帖数: 6806 | 9 i think stack size is fixed when you link. so just add that number. in any
case, OS should have no idea, so it's still useless to look into /proc.
【在 c*******h 的大作中提到】 : 呃,我要的不只是heap上,还包括stack里的。。。可能最开始我没说清楚吧
|
c*******h 发帖数: 1096 | 10 我自己写过小程序验证过的。开个大数组,new前和new后比较一下vsize的大小,
delete前和delete后也比较一下。vsize的变化就是数组的大小
【在 t****t 的大作中提到】 : i think stack size is fixed when you link. so just add that number. in any : case, OS should have no idea, so it's still useless to look into /proc.
|
|
|
t****t 发帖数: 6806 | 11 大数组当然是这样的, 因为大数组是直接向OS分配的. 系统的假设是小规模的内存是经
常分配的, 所以小尺寸是向堆分配的. 大尺寸不常分配, 是直接向OS要的. OS调用的速
度比向堆申请要慢很多很多.
你试试看10个10个字节分配.
【在 c*******h 的大作中提到】 : 我自己写过小程序验证过的。开个大数组,new前和new后比较一下vsize的大小, : delete前和delete后也比较一下。vsize的变化就是数组的大小
|
a***y 发帖数: 2803 | 12 c里面没有new/delete吧,而是malloc(),free.
new/delete 用的是free store,而不是heap.
【在 c*******h 的大作中提到】 : 我自己写过小程序验证过的。开个大数组,new前和new后比较一下vsize的大小, : delete前和delete后也比较一下。vsize的变化就是数组的大小
|
c*******h 发帖数: 1096 | 13 难道所谓的“直接向OS分配”不是向堆里要的?无论是给了需要的那么多,还是多给了
很多,要过来的那一部分内存就是当前进程的,别人也用不了。我需要的就是想知道归
自己的而别人不能用的内存啊。这不就是vsize的意思么?
【在 t****t 的大作中提到】 : 大数组当然是这样的, 因为大数组是直接向OS分配的. 系统的假设是小规模的内存是经 : 常分配的, 所以小尺寸是向堆分配的. 大尺寸不常分配, 是直接向OS要的. OS调用的速 : 度比向堆申请要慢很多很多. : 你试试看10个10个字节分配.
|
c*******h 发帖数: 1096 | 14 我一直以为free store是heap的俗称。。。有什么区别?
【在 a***y 的大作中提到】 : c里面没有new/delete吧,而是malloc(),free. : new/delete 用的是free store,而不是heap.
|
D*******a 发帖数: 3688 | 15 did you try tcmalloc and its heap profiler?
【在 c*******h 的大作中提到】 : 试过getrusage,但是malloc前和malloc后的maxrss是一样的,不知问题在哪 : 试过valgrind,但是只能在一定频率的time_unit取到信息,没办法在任意语 : 句执行后取到信息 : 试过读/proc/self/stat,但是换到cluster上跑程序的时侯stat文件跟单机的 : stat问题看着不一样,一堆数字不知道哪个才是我要的 : 有人也提议过重载new,自己算内存的实用。但是我还要用别人的library, : 不可能把别人的code也重载一遍 : 苍天啊大地啊,谁告诉我一个work的方法吧
|
t****t 发帖数: 6806 | 16 "堆" 有两个意思, 你说的是哪一个?
操作系统管理空余内存, 马马虎虎可以叫堆, 虽然不是按照堆来管理的. 向操作系统申
请内存是从这些空余内存申请的. 另外, 你的libc管理一个私有堆, 你申请100次1个字
节, libc可能只从操作系统分配一次. 另一方面, 如果你申请100次50M字节, 可能libc
每次都从操作系统分配.
如果你想要的是别的进程不能用的内存, 你可能是对的, 但是我也不清楚vsize里是不
是包括了mmap的尺寸.
【在 c*******h 的大作中提到】 : 难道所谓的“直接向OS分配”不是向堆里要的?无论是给了需要的那么多,还是多给了 : 很多,要过来的那一部分内存就是当前进程的,别人也用不了。我需要的就是想知道归 : 自己的而别人不能用的内存啊。这不就是vsize的意思么?
|