본문 바로가기
컴퓨터 기초/C언어

[C언어]37일차 - C언어 기초 (이것이 C언어 자료구조 알고리즘이다.)

by 럭키길버트 2025. 11. 6.
반응형

[C언어]37일차 - C언어 기초 (이것이 C언어 자료구조 알고리즘이다.)

 

자료구조는 단순자료구조와 복합 자료구조가 있다.

 

복합자료 구조는 다시 선형 자료구조와 비선형 자료구조로 나뉜다.

 

 

 

ADT는 자료구조가 갖춰야할 일련의 연산이라고 할 수 있다.

 

 

ADT는 청사진을 제공한다. 

 

 

 

자료구조 내부를 이해하면 라이브러리에서 엉뚱한 자료구조를 선택하는 일을 피할 수 있따.

 

동일한 ADT를 사용하더라도 자료구조에 따라 애플리케이션 성능이 크게 달라질 수 있다.

 

네트워크앱 입출력 버퍼에는 링크드 큐 보다 환형 큐를 사용하는것이 속도면에서 유리하다.

 

메모리 효율이 중요한 앱에서는 링크드 큐가 환형 큐보다 나은 선택일 수 있다.

 

 

C언어에서 배열은 배열에 할당된 메모리의 시작 주소를 갖고 있다.

 

배열이 메모리 주소를 담고 있으므로 포인터에 배열을 할당하면 포인터가 배열을 가리킬 수 있다.

 

 

 

구조체

 

구조체는 다른 데이터 형식을 조합해서 만드는 사용자 정의 데이터 형식이다.

 

 

구조체 형식은 인스턴스를 선언할 때도 struct 키워드를 명시해 줘야 한다.

 

 

 

 

구조체 인스턴스를 만들때 마다 struct 사용하면 불편하다. 그래서 typedef를 사용해준다.

 

 

 

 

 

c언어 작성한 코드 -> 컴파일 - > 실행파일 -> 프로세스(스택, 힙, 데이터, 텍스트)

 

 

텍스트와 데이터 영역은 실행파일에서 읽어 들인 정보를 기록하는 공간이다.

 

텍스트 영역에는 CPU가 실행할 코드가 적재되고, 데이터 영역에는 전역 변수나 정적 변수 등이 저장된다.

 

데이터 영역은 정적 메모리라고도 부른다.

 

 

스택 예) 지역변수 3개를 할당하는 코드.

 

스택에 쌓인 a, b, c 는 코드 블록이 시작될때 순서대로 스택에 쌓이고 코드 블록 끝을 만날때 역순으로 제거가 된다.

 

 

 

 

힙은 프로그래머가 직접 메모리를 관리하는 영역이다.

 

자유에는 책임이 따른다.

즉, 프로그래머는 힙 위에 자유롭게 메모리를 할당 할 수 있지만, 그 메모리를 안전하게 해제하는 것도 프로그래머가 책임져야 하는 일이다.

 

 

이 코드를 실행하면 malloc() 이 Point의 크기만큼 메모리를 힙에 할당하고, 

스택에 위치한 ptr이 그 메모리 주소를 가리키게 된다.

 

 

 

ptr은 자신이 태어난 코드 블록이 끝나는 곳에서 스택으로 부터 제거되지만

 

malloc() 이 할당한 공간은 힙의 한 공간을 차지한 채 남아 있다.

 

그만큼 앱이 사용할 수 있는 힙 공간이 줄어든다. (한마디로 메모리 누수가 생긴다.)

 

free를 해주면 힙에서 해제가 된다.

 

free(ptr);

 

 

반응형