[자료 구조] Stack, Memory allocation

hu22·2024년 5월 11일
0

자료구조

목록 보기
3/3

1. What is Stack?

  • -> LIFO "Last In, First Out(후입선출)" -> 먼저 나온 데이터부터 pop됨

2. Operations

구분OperationsTime Complexity
Constructor- ClassNameO(1)O(1)
---------
Transformer- push(value)O(1)O(1)
- pop()O(1)O(1)
---------
Observer- size()O(1)O(1)
- isFull()O(1)O(1)
- isEmpty()O(1)O(1)
- isempty()-> top = -1 (top의 초기값을 -1로 설정)O(1)O(1)
- pop -> top --;O(1)O(1)
  • pop의 경우 인덱스에 남아있는 실제 데이터값을 지워줘도되고 안지워줘도 됨 -> 참조형식으로 짠다면 top--했을 때 앞으로 참조하지 않으므로 컴퓨터가 비어있다고 판단함.

3. Pointer

  • 포인터에 타입을 지정해줘야하는 이유?
    -> 메모리에서 몇 바이트까지 읽어와야할지 알기 위해서
    통으로된 데이터를 쪼개거나 쪼개진 데이터를 통합해서 쓸 때 유용하게 쓰임
    ex) int -> 4byte지만 char 포인터로 읽어오면 1byte까지만 읽어옴
  • Derefrence Operator
  • NULL Pointer
    아무것도 가리키지 않는다.(메모리 주소 0을 가리키는 게 아님!!)

4. Memory Allocation

  • Memory Map
    Stack, HEAP, DATA, CODE -> 4 Segment

  • Dynamic Allocation
    void make_array(){
    	int cnt = 0;
    	cin >> cnt;
    	~~int temp_array[cnt];
    	//~~→ code 실행 X 
    	//(cuz 지역 변수의 size는 compile time에 결정되어야함!)
    	int* temp_array;
    	temp_array = new int[cnt]; // 동적할당
    }
    
    int main(){
    	make_array();
    	return 0;
    }
    • 동적할당을 하면 HEAP에 저장됨. HEAP은 STACK과 독립적임.
    • function이 끝나도 남아있으므로 delete, return 등 꼭 해주기!
  • Static Allocation
    • DATA segment에 지정됨
      -> DATA segment 는 Program이 실행되는 동안 중간에 추가가 되지도, 사라지지도 않음(compile이 된후 변경X)
profile
ai 개발자를 꿈꾸는 대학생

0개의 댓글