[질문]프로그램내 메모리 해제 관련

caosmos의 이미지

아래글을 읽으면 리눅스 os가
프로그램 종료되면 남아있는 메모리를 자동해제해준다고
한는데 이것이 맞는지 궁금합니다.

예를 들어 malloc을 이용해서 메모리가 할당된 상태에서
Ctrl-C 와 같이 키보드 입력(프로세스 종료)에 의해서
free 함수 호출이전에 프로세스가 종료되어도 malloc으로
호출한 메모리가 자동으로 해제되는것인지요?

윈도우즈환경에서 이렇게 동작하면 메모리가 계속남아있는데
아래글을 읽으면 자동으로 운영체제가 해제해주는거 같아서
질문을 합니다.

Ctrl-C 와 같은 키보드 입력을 검사해서
Free 함수를 호출해서 정상적으로 프로세스가 종료시킬려구 했거든요

좋은 답변 부탁드립니다.

======아래글===========

프로그램을 잘못 작성해서... 메모리 유출이 생기고 있다고 가정했을때..

만약 그 프로그램을 강제로 종료시키면 운영체제는 그 프로세스가 점유하던
모든 메모리(유출되었던 메모리까지 포함해서)를 다 정리하나요?

예전에 윈도우에서는 프로그램 실행시키고 죽이고 하면서 계속 쓰다보면
시스템 자원이(탐색기 창에서-정보보면 나오는 %로 나오는 수치)이 줄어드는
현상을 보였는데.. 이런 경우는 윈도우즈가 프로그램 종료시 메모리 정리를
제대로 하지 못했다는 것을 뜻하는 겁니까?

리눅스의 경우는 어떻게 돌아가는지 궁금합니다.

위로


IsExist
user

가입: 2004년 9월 4일
올린 글: 102
위치: 동방
올려짐: 2004년11월30일 16:33 주제:

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

네 리눅스는 다 정리됩니다. shared 메모리를 쓰지 않았다면요.

그리고 보통 메모리 누수라고 하는거 같습니다.

Necromancer의 이미지

다 없어집니다.

커널이 따로 프로세스 사용 메모리 정보를 따로 갖고 있고(프로세스는 여기에 접근 못합니다)
이걸로 해제시킵니다...

윈도우는 리소스 메모리와 관련된 부분이 문제가 있었죠. 9x 시리즈에서 문제가 됐었죠.
시스템 자원이라는게 리소스 메모리 말한겁니다. 프로그램의 gui 사용
방식에 따라서 문제가 될 수 있는거죠. 리소스는 gui 관련정보를 담기
위해서 쓰는 시스템 메모리와는 별개의 영역입니다.

Written By the Black Knight of Destruction

IsExist의 이미지

좀 예전에 일이라 지금은 어떻게 바뀌었는지 모르겠네요.

임베디드 리눅스 였는데 그 환경에서는 프로세스가 죽어도 해제 안된
경험을 한적이 있습니다. 그나마 다행인게 개발환경이어서 free 하지
않은걸 찾는데 약간 도움이 되더군요.

지금은 바뀌었다고 생각되지만.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

GjtRoql의 이미지

아니면 시그널 처리 루틴에 메모리 해재하는 부분을 넣는것도 괜찮을 거 같은데요.

--------------
Burning Blue!
--------------

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.