64비트 프로세스 메모리 사용량
32비트 프로그램을 64비트로 포팅하다가 발견한 문제입니다. 같은 소스로 빌드했음에도 불구하고 64비트 프로세스가 32비트보다 훨씬 많은 메모리를 차지합니다. pmap으로 프로세스 메모리 맵을 출력해보면 한가지 차이점이 보입니다.
먼저 32비트 프로세스 메모리 맵입니다.
...
00000000006d0000 100 - - - r-x-- ld-2.5.so
00000000006e9000 4 - - - r---- ld-2.5.so
00000000006ea000 4 - - - rw--- ld-2.5.so
00000000006ed000 1256 - - - r-x-- libc-2.5.so
0000000000827000 8 - - - r---- libc-2.5.so
0000000000829000 4 - - - rw--- libc-2.5.so
000000000082a000 12 - - - rw--- [ anon ]
000000000082f000 148 - - - r-x-- libm-2.5.so
0000000000854000 4 - - - r---- libm-2.5.so
0000000000855000 4 - - - rw--- libm-2.5.so
0000000000858000 76 - - - r-x-- libpthread-2.5.so
000000000086b000 4 - - - r---- libpthread-2.5.so
000000000086c000 4 - - - rw--- libpthread-2.5.so
000000000086d000 8 - - - rw--- [ anon ]
0000000000871000 8 - - - r-x-- libdl-2.5.so
0000000000873000 4 - - - r---- libdl-2.5.so
0000000000874000 4 - - - rw--- libdl-2.5.so
0000000000aaf000 896 - - - r-x-- libstdc++.so.6.0.8
0000000000b8f000 16 - - - r---- libstdc++.so.6.0.8
0000000000b93000 4 - - - rw--- libstdc++.so.6.0.8
...
64비트 프로세스 메모리 맵입니다.
...
0000003ebd000000 104 - - - r-x-- ld-2.5.so
0000003ebd219000 4 - - - r---- ld-2.5.so
0000003ebd21a000 4 - - - rw--- ld-2.5.so
0000003ebe000000 1304 - - - r-x-- libc-2.5.so
0000003ebe146000 2048 - - - ----- libc-2.5.so
0000003ebe346000 16 - - - r---- libc-2.5.so
0000003ebe34a000 4 - - - rw--- libc-2.5.so
0000003ebe34b000 20 - - - rw--- [ anon ]
0000003ebe400000 520 - - - r-x-- libm-2.5.so
0000003ebe482000 2044 - - - ----- libm-2.5.so
0000003ebe681000 4 - - - r---- libm-2.5.so
0000003ebe682000 4 - - - rw--- libm-2.5.so
0000003ebe800000 8 - - - r-x-- libdl-2.5.so
0000003ebe802000 2048 - - - ----- libdl-2.5.so
0000003ebea02000 4 - - - r---- libdl-2.5.so
0000003ebea03000 4 - - - rw--- libdl-2.5.so
0000003ebec00000 84 - - - r-x-- libpthread-2.5.so
0000003ebec15000 2044 - - - ----- libpthread-2.5.so
0000003ebee14000 4 - - - r---- libpthread-2.5.so
0000003ebee15000 4 - - - rw--- libpthread-2.5.so
0000003ebee16000 16 - - - rw--- [ anon ]
...
64비트 프로세스 맵을 보면 아래처럼 32비트와는 다르게 모드가 -----인 것들이 2MB씩 차지하고 있는 것이 있습니다.
0000003ebe146000 2048 - - - ----- libc-2.5.so
0000003ebe482000 2044 - - - ----- libm-2.5.so
0000003ebe802000 2048 - - - ----- libdl-2.5.so
0000003ebec15000 2044 - - - ----- libpthread-2.5.so
이것 때문에 64비트 프로세스 사이즈가 32비트 보다 훨씬 크게 잡히는 것 같습니다. 64비트는 원래 이런 것인지, 없앨 수 있는 방법이 있다면 어떻게 하면 되는지 궁금합니다.
댓글 달기