2010-06-22 2 views
0

나는 이것이 아마도 어리석은 질문 일 것이라고 생각하지만, 나는 단지 명확히하고 싶다. 미리 감사드립니다! 함수 내부에서 로컬 변수로 선언 된 구조체 배열이 스택에 할당되면 확실하지 않습니다. 안 그래요?C에서 구조체의 배열이 스택에 할당 되나요?

답변

7

; 자신을 할당하지 않고 (예 : malloc를 호출하여) 선언하거나 정적에 (Fernando says으로) 스택에 할당되었음을 선언하십시오. 구조는 여러 변수를 그룹화하는 방법 일뿐입니다. 그들은 여전히 ​​고정 된 크기 (그 요소의 전체 크기, 아마도 플러스 일부 패딩)이 있고, 구조체의 필드 그냥 구조체 내 어딘가에서 해당 바이트를 당겨 의미에 접근

+1

+1 물론 물론, 'new'는 C++ – Stephen

+0

입니다. @Stephen 아, 네. 나는 "In C 또는 C++에서, 당신의 선택"을 자동으로 읽는 습관이있다. –

+0

스택과 힙은 구현 세부 사항이 아닌가? 나는 C 표준이 "stack"이라는 단어를 언급하는지조차 확신하지 못한다. – dreamlax

0

그것은 단지 다른 변수처럼 :

void function() 
{ 

    struct my_struct a; // in the stack; 
    struct my_struct *b = malloc(sizeof(struct my_strcut)); // not in the stack; 
    static struct my_struct c; // not in the stack; 

} 
1

예, 함수 변수에서 자동 변수로 선언 된 배열은 스택에서 할당됩니다. 성공할 수있는 충분한 스택 공간이 있다면 호출 컨텍스트에서 확신 할 수 없기 때문에 그렇게 할 때 현명한 판단을 원합니다. 기본적으로 Windows는 스레드에 대해 1MB 스택을 만들고 Linux는 기본적으로 8MB 스택을 생성하지만 대규모 구조 배열을 만드는 경우에도 여전히 문제가 발생할 수 있습니다. 일부 운영 체제에서는 스레드 스택이 수 킬로바 이스만큼 작을 수 있습니다.

나는 함수 범위 자동 변수를 간단한 스칼라 유형으로 제한하고 큰 추상 유형과 배열을 힙에 넣는 경향이 있습니다.

1

malloc()을 사용하거나 (@Michael Mrozek이 말한대로) "정적"한정자로 선언하지 않으면 스택에 할당됩니다.

관련 문제