Valgrind 显示分配的内存比实际多
Valgrind shows more memory allocated than actually is
我正在用 C 编写一些简单的代码来测试一些内存分配和指针:
#include <stdlib.h>
#include <stdio.h>
int *randomAlloc(int n) {
int *address = NULL, i = 0;
address = malloc (n * sizeof(int));
for (i = 0; i < n ; i++){
*(address + i) = i ;
}
return address;
}
int main(int argc, char* argv[] ) {
int *address;
int n;
printf("Type vector size: ");
scanf("%d", &n);
address = randomAlloc(n);
free(address);
}
但是由于某些原因,当我输入 4 作为输入时,valgrind 输出:
==2375== Memcheck, a memory error detector
==2375== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==2375== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
==2375== Command: ./a.out
==2375==
Type vector size: 4
==2375==
==2375== HEAP SUMMARY:
==2375== in use at exit: 0 bytes in 0 blocks
==2375== total heap usage: 3 allocs, 3 frees, 2,064 bytes allocated
==2375==
==2375== All heap blocks were freed -- no leaks are possible
==2375==
==2375== For counts of detected and suppressed errors, rerun with: -v
==2375== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
代码处只有一处alloc和一处free。当 n = 4 时,我希望它分配 4*4(sizeof(int))=16 个字节。这是哪里来的?
Valgrind 跟踪在您的应用程序中发生的所有 内存分配,包括由 C 库内部进行的内存分配。它不(也不可能)限于您显式进行的分配,因为 C 库可以 return 指向它在内部分配的内存的指针。
许多标准 I/O 实现将分配缓冲区供 printf()
and/or scanf()
使用,这可能就是您看到的数字的原因。
我正在用 C 编写一些简单的代码来测试一些内存分配和指针:
#include <stdlib.h>
#include <stdio.h>
int *randomAlloc(int n) {
int *address = NULL, i = 0;
address = malloc (n * sizeof(int));
for (i = 0; i < n ; i++){
*(address + i) = i ;
}
return address;
}
int main(int argc, char* argv[] ) {
int *address;
int n;
printf("Type vector size: ");
scanf("%d", &n);
address = randomAlloc(n);
free(address);
}
但是由于某些原因,当我输入 4 作为输入时,valgrind 输出:
==2375== Memcheck, a memory error detector
==2375== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==2375== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
==2375== Command: ./a.out
==2375==
Type vector size: 4
==2375==
==2375== HEAP SUMMARY:
==2375== in use at exit: 0 bytes in 0 blocks
==2375== total heap usage: 3 allocs, 3 frees, 2,064 bytes allocated
==2375==
==2375== All heap blocks were freed -- no leaks are possible
==2375==
==2375== For counts of detected and suppressed errors, rerun with: -v
==2375== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
代码处只有一处alloc和一处free。当 n = 4 时,我希望它分配 4*4(sizeof(int))=16 个字节。这是哪里来的?
Valgrind 跟踪在您的应用程序中发生的所有 内存分配,包括由 C 库内部进行的内存分配。它不(也不可能)限于您显式进行的分配,因为 C 库可以 return 指向它在内部分配的内存的指针。
许多标准 I/O 实现将分配缓冲区供 printf()
and/or scanf()
使用,这可能就是您看到的数字的原因。