free하면 메모리 해제가 안되는 건 어떤 상황을 보시고 그렇게 얘기하시는지..?
heap은 쓰레드간에 문제없이 공유됩니다. alloc, free 각각 아무 쓰레드에서나 해도 되구요.
단 OS의 메모리 관리 정책 상 메모리가 안줄어드는 것처럼 보이는 OS가 있기도 합니다. 리눅스랑 hp가 그랬던거 같은데..
권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -
thread간에 heap을 공유하는 경우 보통 race condition이 발생하기 때문에
alloc,free가 바틀넥이 되는 경우가 많습니다.
그래서 HP는 arena라는 개념을 사용해서 쓰레드들을 그룹핑해서 같은 그룹끼리만 같은 영역의 heap을 사용하게 합니다. 몇 개의 그룹인지는 간단하게 컨피규러블하구요. man malloc 해보셔서 _M_ARENA_OPTS을 찾아보세요.
아마 다르게 나오는 이유는 다른 ARENA를 써서 그렇거나,
OS의 메모리 관리 정책상의 이유거나 둘 중의 하나 일 것 같습니다.
권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -
free하면 메모리 해제가 안되는 건 어떤 상황을 보시고 그렇게 얘기하시
free하면 메모리 해제가 안되는 건 어떤 상황을 보시고 그렇게 얘기하시는지..?
heap은 쓰레드간에 문제없이 공유됩니다. alloc, free 각각 아무 쓰레드에서나 해도 되구요.
단 OS의 메모리 관리 정책 상 메모리가 안줄어드는 것처럼 보이는 OS가 있기도 합니다. 리눅스랑 hp가 그랬던거 같은데..
권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -
테스트 한 것에 의하면~
두 함수에서 printf에 찍히는 값이...
틀립니다.
참고로 OS는 HP-UX 네요.
아..hp는 위에 말씀드린 Os 메모리 관리 상황말고 한가지 더 다른 특
아..hp는 위에 말씀드린 Os 메모리 관리 상황말고 한가지 더 다른 특징이 있습니다.
thread간에 heap을 공유하는 경우 보통 race condition이 발생하기 때문에
alloc,free가 바틀넥이 되는 경우가 많습니다.
그래서 HP는 arena라는 개념을 사용해서 쓰레드들을 그룹핑해서 같은 그룹끼리만 같은 영역의 heap을 사용하게 합니다. 몇 개의 그룹인지는 간단하게 컨피규러블하구요. man malloc 해보셔서 _M_ARENA_OPTS을 찾아보세요.
아마 다르게 나오는 이유는 다른 ARENA를 써서 그렇거나,
OS의 메모리 관리 정책상의 이유거나 둘 중의 하나 일 것 같습니다.
권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -
답변 감사~
답변 감사 드립니다.
자려고 누웠다가 궁금해서 일어나 다시 컴퓨터를 켰습니다.
어째뜬... 스레드에서 데이타 공유 목적으로 스레드를 쓰는것은 위험한 일인것 같네요.
위험한 일이긴 한데..^^쓰레드 프로그래밍에서 피해가기는 힘든 부분
위험한 일이긴 한데..^^
쓰레드 프로그래밍에서 피해가기는 힘든 부분 같습니다.
가능만 하다면 스택 메모리를 쓰시던가,
heap을 쓰시더라도 간단한 메모리 풀 개념을 이용해서 만드시 던가해서
메모리를 쓰실때 많이 생각해서 쓰시는게 중요합니다.
잘만 쓰시게 되면 독이 아니라 약이 됩니다.
쓰레드 프로그래밍에서 아주 유효하고, 유연한 그리고 꼭 필요한 부분입니다.
권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -
댓글 달기