CS/자료구조

[ 자료구조 ] 링크드 리스트 Linked List 연결 리스트 동적 기억 장소에서 포인터 사용

psy_er 2021. 10. 26. 00:31
728x90

[ 자료구조 ] 링크드 리스트 Linked List  연결 리스트 동적 기억 장소에서 포인터 사용

 

포인터가 가리키는 곳의 타입은 주소로 정수형이지만, 연결 리스트(링크드 리스트)가 가지는 포인터 타입은 가리키는 곳의 타입을 고려해야 한다. 

 

sizeof 연산자

 

sizeof 연산자는 몇 바이트를 차지하는지 알려주는 연산자이다.

 

sizeof(int) = 4

sizeof(float) = 4

sizeof(char) = 1

 

 

 

728x90

 

링크드 리스트 정적 기억 장소에서 포인터 사용 (활용도 낮음)

 

#include <stdio.h>
#include <malloc.h>

int main(){

    int *pi;
    float *pf;
    *pi = 1024; 
    *pf = (float) 3.14; 
    //------------------------compile
    printf("an integer = %d, a float = %f",*pi,*pf);
    free(pi); 
    free(pf);
    
    }

#include <stdio.h>
#include <malloc.h>

int main(){

    int *pi;
    float *pf;
    *pi = 1024; 
    *pf = (float) 3.14; 
    //------------------------compile
    printf("an integer = %d, a float = %f",*pi,*pf);
    free(pi); 
    free(pf);
    
    }

 

 

 

728x90

 

 

링크드 리스트 동적 기억 장소에서 포인터 사용 (활용도 높음)

 

#include <stdio.h>
#include <malloc.h>

int main(){

    int *pi;
    float *pf;
    //------------------------------------compile
    pi = (int *)malloc(sizeof(int)); 
    printf("%u\n",pi);
    pf = (float *)malloc(sizeof(float)); 
    *pi = 1024; 
    *pf = (float) 3.14; 
    printf("an integer = %d, a float = %f",*pi,*pf);
    free(pi); 
    free(pf); 

}

 

#include <stdio.h>
#include <malloc.h>

int main(){

    int *pi;
    float *pf;
    //------------------------------------compile
    pi = (int *)malloc(sizeof(int)); 
    printf("%u\n",pi);
    pf = (float *)malloc(sizeof(float)); 
    *pi = 1024; 
    *pf = (float) 3.14; 
    printf("an integer = %d, a float = %f",*pi,*pf);
    free(pi); 
    free(pf); 

 

// sizeof(int) = 4 , 따라서 동적 할당된 4byte 기억 장소 할당

// 기억 장소의 주소 값 출력
// sizeof(float) = 4, 따라서 동적 할당된 4byte 기억 장소 할당
// pi가 가리키는 곳의 값을 1024로 바꾸기

// float가 가리키는 곳의 값을 3.14로 바꾸기

// 기억 장소 반환 free
// 기억 장소 반환 free

 

 

728x90

 

 

정적 기억 장소 포인터 활용 vs 동적 기억 장소 포인터 활용


정적 기억 장소에서 기억 장소에서 포인터를 사용하는 것과 동적 기억 장소에서 포인터를 사용하는 것은 malloc과 free를 사용한다는 점에서 차이가 있다. 동적 기억 장소에서 포인터를 활용하면 컴파일 시에 기억 장소를 2개 할당하는 반면에, 정적 기억 장소에서 포인터를 활용하면 기억 장소를 4개 할당한다. 이는 메모리 효율 측면에서 차이가 있다. 동적 할당을 하면 원하는 만큼 기억 장소를 할당할 수 있다는 장점이 있다.

 

동적 기억 장소는 Runtime때 할당된다.

정적 기억 장소는 Complie때 할당된다.

 

 

728x90