C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[60302] Re:Re:Re:Re:요구를 받아 드리는 방법의 정석이 뭔지 의견을 묻고 싶습니다
Frigate [devilica] 1083 읽음    2010-02-23 13:38
우선, Nibble님 덕분에 제가 잘 모르는 정보를 알게 되었네요. 자세한 설명 감사합니다.

제가 쓴 글에 대해서 부연 설명을 하자면
동적할당의 뜻은 사용자가 필요로 하는 시점에 입력한 값에따라 메모리 할당량을 조절한다는 뜻이었습니다.
메모리 할당 속도의 차이는 제가 잘못 얘기한것 같습니다. 정정하겠습니다.
메모리 할당시 다른 부분(파일/DB)접근이 이뤄지게 될 경우, 구동속도가 지연된다는 의미로
한 얘기였습니다. 이 부분 설명이 부족하여 오해가 생긴 것 같습니다.
메모리의 할당만 비교하면 정적할당이 더 빠르고 유리합니다.

Nibble 님이 쓰신 글 :
: 정정 : 낳다 -> 낫다, 틀리다 -> 다르다.
:
: 시환님이 서두에
: : : 뭐 상황에 따라 조금 달라질 수 있겠지만
: 라고 말씀 하신 것에 대해
: : 따라서 변수나 다른 객체의 동적/정적할당은 경우에 따라 틀려질 수 있기때문에 프로그래머가 상황에 따라 판단해야 하는 부분이 아닐까 합니다.
: 라고 받으신 것은 대비를 만들기엔 부족한 문맥인 것 같군요.
:
: 대개의 경우 정적으로 잡아쓰는 편이 안전합니다. (주관이라기 보단 통계적 기반입니다)
: 개념적으로는 동적 할당이 Adaptive해 보일지 모릅니다만,
: 빈번히 호출되는 부분이나, 할당 해제가 가변 크기로 이루어지는 경우에선
: 장시간 돌렸을 때, 메모리 단편화 문제를 만들게 됩니다.
: (그래서 Garbage Collector 를 채용한 플랫폼들이 있는 것이고, Ansi C/C++ 은 이를 기본적으로 지원하지 않으니까요)
: 또한, 동적할당쪽이 초기 구동이 빠르다는 부분은 Stack pointer만 증가하는 지역 변수 메카니즘이나
: Memory Loader에 의해 전역 초기화 되는 정적 메카니즘에 비해 단정하기 힘든 부분이겠죠.
:
: 컴퓨터란 유한 자원(Main Memory)를 갖고 있는 메모리 풀에 불과하고, 예외를 인정하고 있습니다.
: 즉 할당이 항상 되지는 않죠.
: 그런 상황에서는, 예외가 존재하지 않는 정적 메모리 풀을 운용하는게 가장 안전한 방법 아니겠어요?
:
: 메모리 풀에 있어서, 대개의 경우 시스템 자원에서 할당 가능한 범위를 계산
: 적절하게 영역을 나누어 초기 할당하고 종료시 해제하는 시스템을 사용하는데,
: 이걸 new ~ delete 나 malloc ~ free로 구현한다고 동적 할당이라고 말하면 개념적으로 옳지 않겠죠.
: 가변길이의 요구사항에 메모리 할당 해제를 수시로 적용하느냐가 동적과 정적을 나눈다고 봐야 하구요,
: 반대로 지역변수만 사용할 지라도, 상태에 따라 calling depth가 달라지는 재귀 함수를 만들어 놓고
: 정적이라고 말하는 것도 적당하지 않습니다. 동적이라고 봐야 하겠구요.
:
: 고로, default 1MB 인 stack 영역에서 구현될 수 있는 내용이라면,
: local array 정도로 사용하는게 가장 안전하고 구현하기 편한 방법이고,
: 그보다 큰 메모리를 운용해야 할 땐, heap에 적절한 예산만큼을 미리 할당해서 그 안에서 나누어 쓰는게
: 가장 안전하고, 또한 빠른 방법입니다.
:
: 예외도 있을 순 있지만 (가능성은 없다고 보지만 메모리가 무한대인 경우나, 한번 할당하고 다른 인터럽트 없이
: 반드시 해제되는 경우),
: 저도 김시환님의 의견처럼 간단한 문제이건, 복잡 다단한 문제이건 대다수의 경우
: 성능, 안정성, 무결성 보장용이, 나아가 소프트웨어 인증의 용이성 등등에서 정적 할당 기법이 유리하다고 봅니다.
:
: Frigate 님이 쓰신 글 :
: : 김시환님 말씀도 맞는 말씀입니다, 하지만 제 의견은 조금 틀립니다.
: :
: : 변수의 크기, 사용시점, 그리고 용도에 따라 메모리의 정적 또는 동적 할당을 해야한다고 봅니다.
: : 변수의 크기가 상황에 따라 변하지 않고 일정한 크기를 유지한다면 메모리를 미리 잡아놔도 문제가 없지만
: : 사용자의 요구에따라 메모리 요구량이 달라진다면 동적할당을 해야하는 것이 맞다고 봅니다.
: : 또한 가끔씩 사용되는 큰 변수를 정적으로 할당할 경우 필요이상의 메모리를 낭비하는 경우가 됩니다.
: : 프로그램이 돌아가는 환경(OS/하드웨어)이 모바일이냐 PC냐 또는 그밖의 다른 환경이냐에 따라
: : 그에맞는 적합한 메모리 관리정책을 세워야 하지 않을까 합니다.
: :
: : 동적할당을 하는 프로그램의 경우엔 초기 프로그램 구동이 빠르지만 메모리를 생성하는 시점에
: : 프로그램 퍼포먼스 딜레이가 불가피합니다. 반면에 정적할당의 경우 동적할당에 비해 구동이 느린반면
: : 필요한 메모리를 모두 할당하고 구동했기때문에 메모리를 생성하는 과정이 필요없고 딜레이도 없게 됩니다.
: : 두가지 할당방법모두 장단점이 있기때문에 할당방법의 장점만을 취하기 위해선 초기 일부분은 정적할당을 하고
: : 필요에 따라 동적할당을 해서 쓰는 방법이 있습니다.
: :
: : 따라서 변수나 다른 객체의 동적/정적할당은 경우에 따라 틀려질 수 있기때문에 프로그래머가 상황에 따라 판단해야 하는 부분이 아닐까 합니다.
: :
: : 김시환 님이 쓰신 글 :
: : : 뭐 상황에 따라 조금 달라질 수 있겠지만
: : :
: : : 변수의 최대 크기를 정확히 알고 있는 상황이라면 아예 메모리를 잡아놓고 작업을 하는 편이 낳을 듯 싶고,
: : : 그렇지 않고 변수의 최대 크기를 알 수 없는 상황이라면 그때 그때 메모리를 할당해서 사용해야 하지 않을까 생각이 됩니다.
: : :
: : : 옛날 도스 시대처럼 메모리를 절대적으로 아껴야 하는 시대도 아니고, 메모리를 그때그때 할당하는것도 사실 제대로 메모리 해제에 신경쓰지 않으면 에러를 내는 상황이 되니까 아예 메모리를 잡아놓고 시작하는 것도 나쁠것 같지는 않네요..
: : :
: : : 한수동 님이 쓰신 글 :
: : : : 죄송합니다 질문이라기 보다는 의견을 여쭤 보고 싶네요
: : : : 제가 프로그램 짤때 마다 항상 고민 되는 부분이 있는데요
: : : :
: : : : 사용자가 어떤 값을 입력 할때마다 필요한 변수 혹은 메모리의 양이 달라진다면
: : : :
: : : : 아예 예상되는 가장 많은 변수의 수나  메모리값을 미리 잡아놓고 사용자의 요구를 받아 드리는게 낳나요 아니면
: : : : 사용자가 입력을 하면 그 값이 필요로 하는 변수의 수나 메모리의 양을 계산해서 필요한 만큼만 잡는게 낳은가요?

+ -

관련 글 리스트
60257 요구를 받아 드리는 방법의 정석이 뭔지 의견을 묻고 싶습니다 한수동 992 2010/02/16
60260     전 메모리를 미리 잡아놓는 쪽을 선호합니다. 김준석 965 2010/02/17
60259     Re:요구를 받아 드리는 방법의 정석이 뭔지 의견을 묻고 싶습니다 김시환 964 2010/02/17
60261         Re:Re:요구를 받아 드리는 방법의 정석이 뭔지 의견을 묻고 싶습니다 Frigate 940 2010/02/17
60262             Re:Re:Re:요구를 받아 드리는 방법의 정석이 뭔지 의견을 묻고 싶습니다 Nibble 1012 2010/02/17
60302                 Re:Re:Re:Re:요구를 받아 드리는 방법의 정석이 뭔지 의견을 묻고 싶습니다 Frigate 1083 2010/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.