为什么我的程序占用32KB而不是11200B(Valgrind的地块)

问题描述 投票:1回答:1

n体程序一开始就是这样做的:

  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的质量块,我有这个:

enter image description here

c valgrind
1个回答
0
投票

我不熟悉massif,但是在谈论堆内存时,有两个有趣的数字,操作系统要求分配器分配了多少内存,以及通过malloc()给程序分配了多少分配器]。如果您的程序请求了约10K字节,则可以合理地认为分配器可能已从OS请求了一个整数,例如32K。由于内核调用速度很慢,分配器通常会从OS中以大块的形式请求内存。 (以及其他一些原因)

所以我想您所看到的32K就是分配器从OS那里获取的,准备通过可能发生的任何其他malloc()分配给您的程序。

© www.soinside.com 2019 - 2024. All rights reserved.