全部博文(346)
分类: C/C++
2008-08-25 19:26:52
地址 | 作用 | 说明 |
>=0xc000 0000 | 内核虚拟存储器 | 用户代码不可见区域 |
<0xc000 0000 | Stack(用户栈) | ESP指向栈顶 |
| ↓ ↑ | 空闲内存 |
>=0x4000 0000 | 文件映射区 | |
<0x4000 0000 | ↑ | 空闲内存 |
| Heap(运行时堆) | 通过brk/sbrk系统调用扩大堆,向上增长。 |
| .data、.bss(读写段) | 从可执行文件中加载 |
>=0x0804 8000 | .init、.text、.rodata(只读段) | 从可执行文件中加载 |
<0x0804 8000 | 保留区域 | |
#include <stdio.h> intmain(intargc, char* argv[]) { int first = 0; int* p0 = malloc(1024); int* p1 = malloc(1024 * 1024); int* p2 = malloc(512 * 1024 * 1024 ); int* p3 = malloc(1024 * 1024 * 1024 ); printf("main=%p print=%p\n", main, printf); printf("first=%p\n", &first); printf("p0=%p p1=%p p2=%p p3=%p\n", p0, p1, p2, p3); getchar(); return 0; } |
00514000-00515000 r-xp 00514000 00:00 0 00624000-0063e000 r-xp 00000000 03:01 718192 /lib/ld-2.3.5.so 0063e000-0063f000 r-xp 00019000 03:01 718192 /lib/ld-2.3.5.so 0063f000-00640000 rwxp 0001a000 03:01 718192 /lib/ld-2.3.5.so 00642000-00766000 r-xp 00000000 03:01 718193 /lib/libc-2.3.5.so 00766000-00768000 r-xp 00124000 03:01 718193 /lib/libc-2.3.5.so 00768000-0076a000 rwxp 00126000 03:01 718193 /lib/libc-2.3.5.so 0076a000-0076c000 rwxp 0076a000 00:00 0 08048000-08049000 r-xp 00000000 03:01 1307138 /root/test/mem/t.exe 08049000-0804a000 rw-p 00000000 03:01 1307138 /root/test/mem/t.exe 09f5d000-09f7e000 rw-p 09f5d000 00:00 0 [heap] 57e2f000-b7f35000 rw-p 57e2f000 00:00 0 b7f44000-b7f45000 rw-p b7f44000 00:00 0 bfb2f000-bfb45000 rw-p bfb2f000 00:00 0 [stack] |
#include <stdio.h> #include void* thread_proc(void* param) { int first = 0; int* p0 = malloc(1024); int* p1 = malloc(1024 * 1024); printf("(0x%x): first=%p\n", pthread_self(), &first); printf("(0x%x): p0=%p p1=%p \n", pthread_self(), p0, p1); return 0; } #define N 5 intmain(intargc, char* argv[]) { intfirst = 0; inti= 0; void* ret = NULL; pthread_t tid[N] = {0}; printf("first=%p\n", &first); for(i = 0; i < N; i++) { pthread_create(tid+i, NULL, thread_proc, NULL); } for(i = 0; i < N; i++) { pthread_join(tid[i], &ret); } return 0; } |