是否在valgrind绝对物理地址中报告了内存地址?

时间:2013-07-11 16:29:29

标签: malloc valgrind memory-address calloc

使用mpirun -np 3 valgrind test运行带有valgrind的MPI程序时,我注意到malloc / calloc'ed数组的地址有时对于不同的进程是相同的。这会让我相信Valgrind报告的地址要么不是绝对的,要么与物理内存地址不对应 - 这是有意义的,因为它使用自己的分配器。任何人都可以证实这一点,或者告诉我我在这里缺少哪些琐碎的洞察力?谢谢。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#include <assert.h>

int main(int argc, char* argv[])
{
  int rank, nproc;
  /* first let MPI strip off its MPI stuff: */
  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  MPI_Comm_size(MPI_COMM_WORLD, &nproc);

  double* a;
  int n = 40;
  assert(a = calloc(n, sizeof(double)));
  printf("Rank %d: Address of a = %p\n",rank,a);
  free(a);
  MPI_Finalize();
  return 0;
}

示例输出:

Rank 0: Address of a = 0x6dad300
Rank 1: Address of a = 0x67a8800
Rank 2: Address of a = 0x67a8800

1 个答案:

答案 0 :(得分:0)

在现代处理器/操作系统中,内存映射到程序的进程空间。该程序对其所使用的空间的实际物理内存地址没有任何概念(或兴趣) - 只有设备驱动程序才真正有需要。