2

我使用 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 (deleted) 。是 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);
}
4

0 回答 0