나는 이것이 아마도 어리석은 질문 일 것이라고 생각하지만, 나는 단지 명확히하고 싶다. 미리 감사드립니다! 함수 내부에서 로컬 변수로 선언 된 구조체 배열이 스택에 할당되면 확실하지 않습니다. 안 그래요?C에서 구조체의 배열이 스택에 할당 되나요?
0
A
답변
7
; 자신을 할당하지 않고 (예 : malloc
를 호출하여) 선언하거나 정적에 (Fernando says으로) 스택에 할당되었음을 선언하십시오. 구조는 여러 변수를 그룹화하는 방법 일뿐입니다. 그들은 여전히 고정 된 크기 (그 요소의 전체 크기, 아마도 플러스 일부 패딩)이 있고, 구조체의 필드 그냥 구조체 내 어딘가에서 해당 바이트를 당겨 의미에 접근
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이 말한대로) "정적"한정자로 선언하지 않으면 스택에 할당됩니다.
관련 문제
- 1. 구조체의 2D 배열이 가능합니까?
- 2. C의 인라인 문자열 배열이 스택에 할당되어 있습니까? C에서
- 3. 스택에 문자열 할당
- 4. 스택에 인라인으로 객체 할당
- 5. C에서 구조체의 차이와 C++
- 6. C에서 스택 할당
- 7. C에서 구조체의 메모리를 어떻게 관리합니까?
- 8. FORTRAN에 할당 가능 배열이 필요합니다
- 9. C# 구조체의 객체 필드에 할당/캐스트
- 10. 구조체의 동적 배열에 대한 포인터 할당
- 11. 참조 크기가 지정된 구조체의 원자 할당
- 12. C에서 메모리를 할당 할시기는?
- 13. C에서 구조체의 멤버를 volatile로 선언하는 방법은 무엇입니까?
- 14. C에서 동적으로 할당 된 배열 구성원 삭제하기
- 15. C에서 메모리 할당 해제에 관해
- 16. 힙 할당 객체의 데이터 멤버가 힙 또는 스택에 할당됩니까?
- 17. C 구조체의 배열
- 18. Objective C에서 할당 및 할당 해제는 얼마나 빠릅니까?
- 19. C에서 헤더 파일 내부에 구조체의 구조체를 초기화하는 방법은 무엇입니까?
- 20. C에서 포인터가있는 int 행렬 - 메모리 할당 혼동
- 21. C에서 할당 된 메모리를 할당하고 비우는 방법
- 22. 할당 후 C에서 struture 값을 읽지 못했습니다.
- 23. 구조체의 함수
- 24. 구조체의 존재는
- 25. 구조체의 요소
- 26. 구조체의 구조체
- 27. 구조체의 배열에 메모리 덩어리를 할당하십시오.
- 28. NSMutableArray가 출시 되나요?
- 29. 배열이 배열이 아닌 php 이상한 버그
- 30. C# struct C# struct 구조체의 마샬 배열
+1 물론 물론, 'new'는 C++ – Stephen
입니다. @Stephen 아, 네. 나는 "In C 또는 C++에서, 당신의 선택"을 자동으로 읽는 습관이있다. –
스택과 힙은 구현 세부 사항이 아닌가? 나는 C 표준이 "stack"이라는 단어를 언급하는지조차 확신하지 못한다. – dreamlax