[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:54232] 共有ライブラリ等のメモリ使用について



$B:#2s$,=i$a$F$NEj9F$G$9$,!"$3$3$N%a!<%j%s%0%j%9%H$K$U$5$o$7$/$J$$(B
$BFbMF$G$7$?$i$4;XE&2<$5$$!#(B

$B:#!"$o$?$7$O6&M-%i%$%V%i%j$d$B<+J,$J$j$KM}2r$7$h$&$H(B /proc/$B%W%m%;%9HV9f(B/maps$B%U%!%$%k(B $B$r8+;O$a$?(B
$B$N$G$9$,!"J,$+$i$J$$;v$P$+$j$G:G=i$+$i%D%^%:%$$F$*$j$^$9!#(B

$B

(1) $B6&M-%i%$%V%i%j$,%a%b%j>e$G6&M-$5$l$kMM;R$r3NG'$7$h$&$H$7$?!#(B
    $B$D$^$j!":G=i$N%3!<%k$G%a%b%j$K%m!<%I$5$l(B $B$=$N8e>oCs$9$k$5$^$r(B
    $B3NG'$7$h$&$H$7$?!#(B
    $B$7$+$7!"6&M-%i%$%V%i%j$O$=$NETEYJL$N%"%I%l%9$K%m!<%I$5$l$?!#(B

(2) $B#2$D$N0[$J$k    $B$5$l$k%a%b%j$O!"0[$J$k>l=j$G$"$k;v$r3NG'$7$h$&$H$7$?!#(B
    $B$7$+$7!"#2$D$N

$B>\:Y$rE:IU%U%!%$%k(B(try1.txt, try2.txt) $B$K$^$H$a$^$7$?!#(B

$B$b$7$+$7$?$i!"A4A3%H%s%A%s%+%s$J;v$r$7$F$$$k2DG=@-$b$"$j$^$9!#(B
$B$I$J$?$+$465<(D:$1$k$H$"$j$,$?$$$H;W$$Ej9F$$$?$7$^$7$?!#(B
$B59$7$/$*4j$$CW$7$^$9!#(B

X22:001# cat - &						<----- 1つ目のプログラムを起動。(標準入力待ち)
[1] 2260
X22:001# head - &						<----- 2つ目のプログラムを起動。(標準入力待ち)
[2] 2261

[1]+  Stopped                 cat -
X22:001# ps								<----- プロセス番号を確認。
  PID TTY          TIME CMD
 2174 pts/0    00:00:00 login
 2198 pts/0    00:00:00 su
 2199 pts/0    00:00:00 bash
 2260 pts/0    00:00:00 cat				<----- プロセス番号=2260
 2261 pts/0    00:00:00 head			<----- プロセス番号=2261
 2262 pts/0    00:00:00 ps

[2]+  Stopped                 head -
X22:001#
X22:001#								------ ここで /proc/プロセス番号/maps を確認。------
X22:001#
X22:001# cat /proc/2260/maps
08048000-0804c000 r-xp 00000000 03:01 146815     /bin/cat
0804c000-0804d000 rw-p 00003000 03:01 146815     /bin/cat
0804d000-0806e000 rw-p 0804d000 00:00 0          [heap]
b7cd5000-b7eb4000 r--p 00000000 03:01 148304     /usr/lib/locale/locale-archive
b7eb4000-b7eb5000 rw-p b7eb4000 00:00 0
b7eb5000-b7fdc000 r-xp 00000000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7fdc000-b7fe1000 r--p 00127000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7fe1000-b7fe3000 rw-p 0012c000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7fe3000-b7fe8000 rw-p b7fe3000 00:00 0
b7fe8000-b7fe9000 r-xp b7fe8000 00:00 0          [vdso]
b7fe9000-b7ffe000 r-xp 00000000 03:01 32613      /lib/ld-2.3.6.so
b7ffe000-b8000000 rw-p 00014000 03:01 32613      /lib/ld-2.3.6.so
bff7a000-bff8f000 rw-p bff7a000 00:00 0          [stack]
X22:001#
X22:001#
X22:001#
X22:001# cat /proc/2261/maps
08048000-0804e000 r-xp 00000000 03:01 130759     /usr/bin/head
0804e000-0804f000 rw-p 00005000 03:01 130759     /usr/bin/head
0804f000-08070000 rw-p 0804f000 00:00 0          [heap]
b7c91000-b7ca9000 r-xp 00000000 03:01 132215     /usr/lib/gconv/libJIS.so
b7ca9000-b7cab000 rw-p 00017000 03:01 132215     /usr/lib/gconv/libJIS.so
b7cab000-b7cae000 r-xp 00000000 03:01 131284     /usr/lib/gconv/EUC-JP.so
b7cae000-b7cb0000 rw-p 00002000 03:01 131284     /usr/lib/gconv/EUC-JP.so
b7cb0000-b7cb6000 r--s 00000000 03:01 132790     /usr/lib/gconv/gconv-modules.cache
b7cb6000-b7cd1000 r--p 00000000 03:01 130866     /usr/share/locale/ja/LC_MESSAGES/coreutils.mo
b7cd1000-b7eb0000 r--p 00000000 03:01 148304     /usr/lib/locale/locale-archive
b7eb0000-b7eb1000 rw-p b7eb0000 00:00 0
b7eb1000-b7fd8000 r-xp 00000000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7fd8000-b7fdd000 r--p 00127000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7fdd000-b7fdf000 rw-p 0012c000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7fdf000-b7fe4000 rw-p b7fdf000 00:00 0
b7fe4000-b7fe5000 r-xp b7fe4000 00:00 0          [vdso]
b7fe5000-b7ffa000 r-xp 00000000 03:01 32613      /lib/ld-2.3.6.so
b7ffa000-b7ffc000 rw-p 00014000 03:01 32613      /lib/ld-2.3.6.so
bfa9c000-bfab1000 rw-p bfa9c000 00:00 0          [stack]
X22:001#
X22:001#
X22:001#
-------------------------------------------------------------------------------------------
以上の結果から

 (1) cat プログラムは、		 アドレス=0x08048000~のメモリにロードされた。
 (2) headプログラムも同じく、アドレス=0x08048000~のメモリにロードされた。

	08048000-0804c000 r-xp 00000000 03:01 146815     /bin/cat
	:
	:

	08048000-0804e000 r-xp 00000000 03:01 130759     /usr/bin/head
	:
	:

 同じ場所に同時に2つのプロブラムがロードされている????。

-------------------------------------------------------------------------------------------
X22:001# ls -l											<----- ソースファイルは2つ。
合計 16
-rw-r--r-- 1 root root    48 2010-06-13 11:35 lib0.c
-rw-r--r-- 1 root root   155 2010-06-13 11:35 main.c
X22:001#
X22:001#
X22:001# cat main.c										<----- main.c の中身。
/*----------------------------*/
#include <stdio.h>
void lib0(void);
int main(void)
{
        getc(stdin);									<----- プロセスがココで止める為。
        lib0();
        return 0;
}
/*----------------------------*/
X22:001#
X22:001#
X22:001# cat lib0.c										<----- lib0.c の中身。
/*----------------------------*/
void lib0(void){}
/*----------------------------*/
X22:001#
X22:001#
X22:001# gcc -c -fPIC -o lib0.o lib0.c					<----- lib0.c をコンパイル。
X22:001# gcc -shared -o lib0.so lib0.o					<----- 更に共有ライブラリにする。
X22:001# gcc -o main -lc -L. -l0 main.c					<----- main.cとリンクし実行形式を作る。
X22:001#
X22:001#
X22:001# ls -l
合計 40
-rw-r--r-- 1 root root    48 2010-06-13 11:35 lib0.c
-rw-r--r-- 1 root root   577 2010-06-13 11:37 lib0.o
-rwxr-xr-x 1 root root  5178 2010-06-13 11:37 lib0.so
-rwxr-xr-x 1 root root 11376 2010-06-13 11:37 main
-rw-r--r-- 1 root root   155 2010-06-13 11:35 main.c
X22:001#
X22:001#
X22:001# LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./main &	<----- 1つ目をバックグラウンドで実行。
[1] 2424												<----- プロセス番号=2424
X22:001#

[1]+  Stopped                 LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./main
X22:001#
X22:001#
X22:001#
X22:001# LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./main &	<----- もう1つバックグラウンド実行。
[2] 2425												<----- プロセス番号=2425
X22:001#

[2]+  Stopped                 LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./main
X22:001#
X22:001#
X22:001#
X22:001#							------ ここで /proc/プロセス番号/maps を確認。------
X22:001#
X22:001# cat /proc/2424/maps
08048000-08049000 r-xp 00000000 03:01 165474     /root/test/001/main
08049000-0804a000 rwxp 00000000 03:01 165474     /root/test/001/main
b7e37000-b7e39000 rwxp b7e37000 00:00 0
b7e39000-b7e3a000 r-xp 00000000 03:01 165479     /root/test/001/lib0.so
b7e3a000-b7e3b000 rwxp 00000000 03:01 165479     /root/test/001/lib0.so
b7e3b000-b7f62000 r-xp 00000000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7f62000-b7f67000 r-xp 00127000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7f67000-b7f69000 rwxp 0012c000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7f69000-b7f6e000 rwxp b7f69000 00:00 0
b7f6e000-b7f6f000 r-xp b7f6e000 00:00 0          [vdso]
b7f6f000-b7f84000 r-xp 00000000 03:01 32613      /lib/ld-2.3.6.so
b7f84000-b7f86000 rwxp 00014000 03:01 32613      /lib/ld-2.3.6.so
bfb9d000-bfbb2000 rwxp bfb9d000 00:00 0          [stack]
X22:001#
X22:001#
X22:001#
X22:001# cat /proc/2425/maps
08048000-08049000 r-xp 00000000 03:01 165474     /root/test/001/main
08049000-0804a000 rwxp 00000000 03:01 165474     /root/test/001/main
b7de6000-b7de8000 rwxp b7de6000 00:00 0
b7de8000-b7de9000 r-xp 00000000 03:01 165479     /root/test/001/lib0.so
b7de9000-b7dea000 rwxp 00000000 03:01 165479     /root/test/001/lib0.so
b7dea000-b7f11000 r-xp 00000000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7f11000-b7f16000 r-xp 00127000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7f16000-b7f18000 rwxp 0012c000 03:01 49803      /lib/tls/i686/cmov/libc-2.3.6.so
b7f18000-b7f1d000 rwxp b7f18000 00:00 0
b7f1d000-b7f1e000 r-xp b7f1d000 00:00 0          [vdso]
b7f1e000-b7f33000 r-xp 00000000 03:01 32613      /lib/ld-2.3.6.so
b7f33000-b7f35000 rwxp 00014000 03:01 32613      /lib/ld-2.3.6.so
bffad000-bffc3000 rwxp bffad000 00:00 0          [stack]
X22:001#
X22:001#
X22:001#
------------------------------------------------------------------------------------------
以上の結果から

 (1) 1回目の起動では共有ライブラリlib0.soは、アドレス=b7e39000~のメモリにロードされた。
 (2) 2回目の起動では共有ライブラリlib0.soは、アドレス=b7de8000~のメモリにロードされた。

	:
	b7e39000-b7e3a000 r-xp 00000000 03:01 165479     /root/test/001/lib0.so
	:
	:

	:
	b7de8000-b7de9000 r-xp 00000000 03:01 165479     /root/test/001/lib0.so
	:
	:

 共有ライブラリなのに 一旦 メモリにロードされたあとでも 2回目の使用の時には別アドレスに
 再ロードされる????。

------------------------------------------------------------------------------------------