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的质量块,我有这个:
我不熟悉massif
,但是在谈论堆内存时,有两个有趣的数字,操作系统要求分配器分配了多少内存,以及通过malloc()
给程序分配了多少分配器]。如果您的程序请求了约10K字节,则可以合理地认为分配器可能已从OS请求了一个整数,例如32K。由于内核调用速度很慢,分配器通常会从OS中以大块的形式请求内存。 (以及其他一些原因)
所以我想您所看到的32K就是分配器从OS那里获取的,准备通过可能发生的任何其他malloc()
分配给您的程序。