为什么我的程序占用 32KB 而不是 11200B(Valgrind 的地块)
Why my program occupies 32KB and not 11200B (Valgrind's massif)
n-body 程序一开始就是这样做的:
real4 *pin = (real4*)malloc(n * sizeof(real4));
real4 *pout = (real4*)malloc(n * sizeof(real4));
real3 *v = (real3*)malloc(n * sizeof(real3));
real3 *f = (real3*)malloc(n * sizeof(real3));
它的总大小应该是(如果 n = 100):100*32 + 100*32 + 100*24 + 100*24 = 11200B 但是对于 Valgrind 的地块我有这个:
我不熟悉 massif
,但是在谈论堆内存时,有两个数字很有趣,分配器从 OS 请求了多少内存,还有多少通过 malloc()
分配给您的程序的分配器。如果您的程序请求了 ~10K 字节,则可以合理地认为分配器可能已经从 OS 请求了一个像 32K 这样的整数。分配器通常从 OS 请求大块内存,因为内核调用很慢。 (以及其他一些原因)
所以我猜你看到的 32K 是分配器从 OS 获得的,准备好通过可能发生的任何额外 malloc()
提供给你的程序。
n-body 程序一开始就是这样做的:
real4 *pin = (real4*)malloc(n * sizeof(real4));
real4 *pout = (real4*)malloc(n * sizeof(real4));
real3 *v = (real3*)malloc(n * sizeof(real3));
real3 *f = (real3*)malloc(n * sizeof(real3));
它的总大小应该是(如果 n = 100):100*32 + 100*32 + 100*24 + 100*24 = 11200B 但是对于 Valgrind 的地块我有这个:
我不熟悉 massif
,但是在谈论堆内存时,有两个数字很有趣,分配器从 OS 请求了多少内存,还有多少通过 malloc()
分配给您的程序的分配器。如果您的程序请求了 ~10K 字节,则可以合理地认为分配器可能已经从 OS 请求了一个像 32K 这样的整数。分配器通常从 OS 请求大块内存,因为内核调用很慢。 (以及其他一些原因)
所以我猜你看到的 32K 是分配器从 OS 获得的,准备好通过可能发生的任何额外 malloc()
提供给你的程序。