为什么我的程序占用 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() 提供给你的程序。