为什么新创建的内存映射到mmap()中的/ dev / zero(已删除)

时间:2013-04-09 11:50:24

标签: c linux

我使用mmap创建了一块4K内存。

kg>./a.out &
[1] 23286

 Memory Address : 0xb7f6f000

kg>pmap 23286
23286:   ./a.out
0053d000      4K r-x--    [ anon ]
08048000      4K r-x--  /home/trng3/sh/POC/a.out
08049000      4K rwx--  /home/trng3/sh/POC/a.out
46f46000    100K r-x--  /lib/ld-2.5.so
46f5f000      4K r-x--  /lib/ld-2.5.so
46f60000      4K rwx--  /lib/ld-2.5.so
46f68000   1244K r-x--  /lib/libc-2.5.so
4709f000      8K r-x--  /lib/libc-2.5.so
470a1000      4K rwx--  /lib/libc-2.5.so
470a2000     12K rwx--    [ anon ]
b7f57000      4K rw---    [ anon ]
b7f6f000      4K rw-s-  /dev/zero (deleted)
b7f70000      4K rw---    [ anon ]
bfd18000     88K rw---    [ stack ]
 total     1488K

当我计算尺寸(btwn b7f6f000和b7f70000)时,它变为1000字节而不是4K。为什么内存没有被创建为4K? 。为什么新创建的内存映射到/ dev / zero(已删除)。是rw-s-,s是交换空间。

源代码:

int main(){
 /* Variables */
 create_memory();
 return SUCCESS;
}

/* Create Memory Region in User Space in RAM */
int create_memory(){

 ptr_file_sys = mmap(NULL,4096,PROT_READ | PROT_WRITE,MAP_ANON | MAP_SHARED,-1,0);
 if(MAP_FAILED == ptr_file_sys){
  error_print("\n Cannot allocate memory space!\n");
 }
 else{
  debug_print("\n Memory Address : 0x%x \n",ptr_file_sys);
 }

 return SUCCESS;
}

int delete_memory(){
 munmap(ptr_file_sys,4096);
}

0 个答案:

没有答案