archive 와 shared 라이브러리의 차이

moonjw1520의 이미지

안녕하세요..
최근 리눅스에서 프로그램을 만들고 있는데
같은 SDK를 archive/shared 라이브러리로 만들고
각각 만든 프로그램을 실행시켜보면
각 프로세스의 메모리 사용량이
archive 보다 shared가 더 많이 차지 합니다.
(shared을 경우 dlopen을 사용하진 않습니다.)

쉐어드 라이브러리를 이용해서 프로세스를 여러개 실행시키면
메모리 사용량이 줄어들지 않고 일정한 크기대로 계속 늘어 나는 것을 볼 수 있었습니다.
text영역이 공유라이브러리에서 공유 된다고 알고 있는데요.
메모리 영역을 보면 archive 는 text영역이 크고
shared는 text영역이 확 줄고 data영역이 큰데
어떠한 이유에서 커지는지 잘 모르겠습니다.
(보통 data영역은 초기화되지 않은 전역 변수가 들어가는 것으로 알고 있습니다...)

혹시 개인적으로 만든 라이브러리 컴파일 옵션이 잘못됐나 싶어
/usr/lib/pthread.a 와 .so로 테스트 해본 결과 똑같았습니다.

저도 책에서 봐온바로는 공유 라이브러리는 공유를 하기때문에 메모리 사용에 유리한 이점을 가지고 있다라고 알고 있었는데
제가 잘못 알고 있는지 그런 결과가 안나와서 이렇게 질문을 올립니다.

질문요약
1. shared library는 text영역이 확 줄고 data 부분이 늘어났는지 궁금합니다.
2. text영역이 줄어든 만큼 공유하는 영역이 줄긴 했지만 그부분이라도 공유가 되어 2번째 프로세스 부터는
메모리 사용량이 줄어야 될 것 같은데 왜 메모리가 일정하게 늘어나는지 궁금합니다.
3. 만약 메모리 사용량이 일정하게 늘어난다면 shared library를 사용하는 장점은 라이브러리 패치나 버그시에 프로그램을 컴파일 하지 않고
라이브러리만 컴파일 된다는 장점만 있는것인지 궁금합니다.

읽어주셔서 감사합니다.

참고
테스트 시에 main()내용은 .a .so 모두 같음.
elfread -S 을 사용해서 메모리 영역을 확인.
메모리 사이즈
./top RES 확인.
/proc/process id/status 에서 VmSize, VmRSS 확인.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.