2012-03-07 16 views
5

to tylko "na pewno" pytanie tutaj. Czy są jakieś znane specjalne ograniczenia/błędy w rekursji/pętlach dla systemów x64 w .NET 4?Wyrzucony wyjątek StackOverflowException na systemach x64; działa poprawnie na x86

Moja sprawa jest całkiem prosta - program działa dobrze na każdym systemie x86, ale zawiesza się z wyjątku StackOverflowException na systemach x64 (program zawiera trochę kodu XML/mapującego zawierającego rekursje w kilku miejscach i takie).

Obecnie jedynym rozwiązaniem tego problemu jest wywołanie na moim zestawie corflags /32BIT+ (a program uruchamia się poprawnie). Ale zastanawiałem się - czy są jakieś specjalne przypadki, o których wiadomo, że powodują błędy/problemy na x64?

Dzięki.

Odpowiedz

9

Wskaźniki wymagają więcej pamięci do przedstawienia w x64 (w rzeczywistości dwa razy więcej). W związku z tym zużyjesz znacznie więcej pamięci, więc głęboka rekurencja może spowodować przepełnienie stosów na x64 wcześniej niż na x86. Możesz spróbować raising the stack limit, aby złagodzić ten problem.

+3

To zdarzyło się kiedyś w firmie, w której pracowałem ... najwyraźniej byłem jedynym w budynku, który mógł wyjaśnić, dlaczego tak się stało ... te lata C opłacały się, a oni dostali 64-bitową przesyłkę. –

+0

Dzięki za komentarz i link - oba były bardzo pomocne. I tak, zwiększenie limitu stosu również pomogło. – Jefim

Powiązane problemy