Q&A

  • StackOverflow에러에 대해서자세히 아시는분?
안녕하세요?

StackOverflow에러에 대해서 자세히 아시는 분은 설명좀 부탁드립니다.

설계상 주의점이라던가?

변수와 클래스등의 생성해제에 관련된 스택정보를 설명해 주시면

더 좋습니다.

2  COMMENTS
  • Profile
    밥벌레 2000.03.03 17:13
    스택 stack overflow 는 말그대로 스택이 꽉찬 에러임다..

    스택을 언제 쓰냐면..

    local 변수, 함수 호출시 인자전달, 리턴 어드레스 저장등등으로 쓰임다..

    따라서..

    procedure a;

    var

    a: array[0..10000000] of integer; //<- 이거 만들다가 스택오버플로..

    begin

    end;

    이렇게 함 나구요..

    또..

    procedure b;

    begin

    b; //<- 계속 뺑뺑이 돌다가 결국 에러..

    end;



    이렇게 해도 납니다..리턴 어드레스가 한정없이 쌓이니깐..

    해결 방법은..배열의 경우는 외부 변수나 클래스 변수, 또는 동적 할당으로 배열을 만들어서..스택을 사용 하지 않으면 되구..

    recursive call 일 경우는 알고리즘 잘 짜야죠...뭐..recursive call 은 외부 스택을 사용해서 재귀호출 안하도록 고칠 수 있슴다..

    군데..보통 정상적으로 프로그래밍하는경우는 잘 안나는 에러임다..

    참고로..스택을 사용하는 로컬 변수는..스택 포인터 레지스터를 사용하기 땜에 global 변수보다 속도가 빠름다..

    또..인스턴스는 몽땅 스택아닌곳에 만들어 집니다..폼이나..에디트..뭐..이런거 몽땅..

    구럼 도움이 되셨길..



    지나가는 사람 wrote:

    > 안녕하세요?

    > StackOverflow에러에 대해서 자세히 아시는 분은 설명좀 부탁드립니다.

    > 설계상 주의점이라던가?

    > 변수와 클래스등의 생성해제에 관련된 스택정보를 설명해 주시면

    > 더 좋습니다.

  • Profile
    최용일 2000.02.26 03:37
    흠.. 많이 나지 않은 에런데... 프로시져나 함수의 파라매터로 덩치가 큰 레코드보다는

    포인터를 넣어주는 것이 좋구요... 그밖에 별다른 주의 점은 없네요..

    $M, $MINSTACKSIZE and $MAXSTACKSIZE 지시자를 사용하여 최소 1K에서 최대2G까지 스택

    의 크기를 조정할 수있습니다..$M, $MINSTACKSIZE and $MAXSTACKSIZE지시자는 unit이나

    library에서는 쓸 수 없고 반드시 program에서만 선언하여야 합니다.

    문 법 {$M minstacksize,maxstacksize}

    {$MINSTACKSIZE number}

    {$MAXSTACKSIZE number}

    기본값 {$M 16384,1048576}

    범 위 전역



    지나가는 사람 wrote:

    > 안녕하세요?

    > StackOverflow에러에 대해서 자세히 아시는 분은 설명좀 부탁드립니다.

    > 설계상 주의점이라던가?

    > 변수와 클래스등의 생성해제에 관련된 스택정보를 설명해 주시면

    > 더 좋습니다.