2013-10-08 3 views
2

이 아주 작은 프로그램을 작성했습니다. 메모리가 실제로 할당되었는지 아닌지 확인하고 싶습니다.개체를 만들지 않고 메모리 할당

struct page_table{ 
    int a[512]; 
}; 
typedef struct page_table pte; 
int main(){ 
    printf("size of pte = %d\n",sizeof(pte)); 
    return 0; 
} 

제 질문은 구조체 pte에 대한 개체를 생성하지 않습니다. 나는 단지 그것을 선언하고있다. 내 구조의 sizeof 2048 보여줍니다.하지만 실제로 구조체에 대한 개체를 만들었습니다 이후 실제 메모리 할당 된 경우 알고 싶었어요. 나는 gcc 컴파일러를 사용하고있다.

답변

3

아니요, 힙 또는 스택 메모리가 예제에 쓰여진 구조체로 인해 할당되지 않습니다. 하지 레지스터를 사용하는 경우 형식화하는 및 문자열을 출력하고 sizeof(pte) 컴파일 시간 수 스택에 호출하는 동안 메모리를 할당하는 반면

printf 내부적으로 메모리를 할당합니다. C에서

, 메모리는 스택에 할당 할 경우 :

int main() 
{ 
    struct page_table* p = malloc(sizeof(struct page_table)); 
    ... 
    free(p); 

    return 0; 
} 
+0

Johann Gerell – CHID

+0

컴파일러에서'p'가 사용되지 않는다면 변수에 메모리를 할당하지 않을 수 있습니다. 예를 들어, 주소 인쇄와 같이 강제로 할 수 있습니다. –

2

당신은 어느 선언이나 정의됩니다

int main() 
{ 
    struct page_table p; 

    return 0; 
} 

그리고, C에서, 메모리 힙에 할당 할 객체. 따라서 struct page_tablepte이라는 선언을 통해 개체에 대한 저장소가 예약되어 있지 않습니다.

이 :

struct page_table{ 
    int a[512]; 
}; 

는 유형 struct page_table를 선언합니다.

그리고이 :

typedef struct page_table pte; 

는 유형 struct page_table의 새 이름 pte을 만듭니다.

+0

감사합니다. @ouah – CHID

관련 문제