본문 바로가기

C11

[C] 메모리 할당 - 동적 메모리 할당 (김성엽의 기초 C언어 강좌 16장 2) 🔔 김성엽 님의 Do it! C언어 입문 동영상 강의를 보면서 정리한 내용입니다. 모든 그림과 코드 예제는 해당 강의에서 발췌한 내용입니다. 스택 메모리는 작은 크기(1Mb)와 모든 것이 컴파일타임에 정해진다는 한계점이 존재한다. 이를 보완하기 위해 동적 메모리 할당을 사용할 수 있다. 메모리의 스택세그먼트에는 지역변수에 할당되는 스택 영역 외에 힙 영역이 존재한다. 힙(Heap)은 동적 메모리 할당을 위한 영역인데 컴파일 타임이 아닌 프로그램 실행 중 언제든지 원하는 시점에 메모리 할당이 가능하고, 메모리 사용이 끝나면 언제든지 할당한 메모리를 해제할 수 있다. 또한 원하는 크기 만큼, GB 단위까지도 할당이 가능하다. malloc 함수로 동적 메모리 할당하기 malloc(memory allocatio.. 2022. 10. 28.
[C] 메모리 할당 - 정적 메모리 할당 (김성엽의 기초 C언어 강좌 16장 1) 🔔 김성엽 님의 Do it! C언어 입문 동영상 강의를 보면서 정리한 내용입니다. 모든 그림과 코드 예제는 해당 강의에서 발췌한 내용입니다. 🗒️ terminology 프로그램 프로그래머가 만든 프로그램 실행 파일 e.g. .exe 파일 프로세스 CPU가 프로그램의 명령등을 실행할 수 있도록, 운영체제가 프로그램의 명령들을 읽어서 메모리에 재구성한 것. '실행 중인 프로그램' 이라고도 한다 세그먼트*의 집합으로 구성 세그먼트 64kb 이하의 메모리 그룹으로서, 여러가지 정보나 사용자가 입력한 데이터를 기억하는 메모리 공간 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트 등으로 구성 (이 세가지 이외에도 다양한 세그먼트들이 존재) 메모리 할당 메모리 할당이란 내 프로그램이 운영체제로 배정받은 메모리 공간 .. 2022. 10. 28.
[C] 연결리스트 | 연결리스트란 / 연결리스트 생성 / 노드 삽입 / 검색 / 노드 삭제 🔔 아래 포스팅은 K.N.King 의 C Programming : A Modern Approach 2/e 의 17.5 Linked Lists 를 참고하여 작성하였으며 모든 예제 코드는 해당 도서의 예제 코드입니다! 🔔 연결 리스트 연결 리스트(linked list)는 '노드'라 불리는 구조들의 연결(chain)로 구성되어있고, 각각의 노드가 연결된 다음 노드를 가리키는 포인터(아래 그램에서의 화살표)를 포함하는 자료 구조이다. 연결 리스트에서 마지막 노드는 다음 노드가 없기 때문에 null 포인터를 포함한다. (아래 그림에서는 대각선으로 표시되어있음 ) 연결 리스트의 장단점 여러 데이터들을 모아서 저장할 때는 일반적인 배열 뿐 아니라 연결리스트도 좋은 자료 구조가 될 수 있다. 연결리스트에서는 노드를 추.. 2022. 10. 24.
[C] 문자열 리터럴 (문자열 상수) | 문자열 리터럴의 저장, 포인터, 문자열 변수와 문자열 상수 문자열 리터럴 정수형 자료형들을 다루었을 때(참고) 문자형 char는 single quote(' ')로 감싸 1바이트 문자 하나를 저장했다. 반면, 문자 하나가 아닌 문자열(sequence of characters)은 double quote(" ")로 감싸고 '문자열 리터럴(string literal)'이라 한다. printf와 scanf를 사용할 때 사용한 서식 문자열 또한 문자열 리터럴이다. Escape Sequence 문자열 리터럴 내에 \n 와 같은 escape sequences를 사용해서 커서를 다음 줄로 넘어가게 할 수 있다. \ (backslash) 문자열 리터럴을 여러 줄에 걸쳐서 작성하고싶을 때 역슬래시 문자(\)를 사용할 수 있다. 이때, \ 다음에는 개행문자(\n) 외에 어떠한 문자도.. 2022. 10. 23.
[C] 배열과 포인터 | 포인터와 배열의 관계, 배열 이름을 포인터처럼 사용하기, 포인터를 배열의 이름으로 사용하기 포인터와 배열의 관계 💡 배열 이름은 해당 배열의 첫번째 요소의 주소값을 갖는다 이를 확인하기 위해 배열을 선언하고 값을 할당한 뒤 각각의 배열 요소 값, 주소, 배열 이름을 printf 해보자. #include int main(void) { int i ; int arr[] = {1,2,3,4,5} ; printf("배열 요소 출력 : "); for(i=0; i 2022. 10. 22.
[C] 포인터 | 포인터란, 포인터 변수의 선언/초기화/호출, &연산자와 *연산자, 포인터의 연산, 포인터에 자료형이 필요한 이유 포인터 (pointer) pointer. 무엇을 point 하는 걸까? C 언어의 포인터는 특정 주소를 가르키고 있다는 개념이다. (즉 해당 주소값을 갖고 있다) 이 주소는 '메모리'주소를 의미하기 때문에 잠시 메모리에 대해 짚고 넘어가보자. 컴퓨터의 주 메모리는 바이트 (= 8개 비트 정보를 저장할 수 있는 크기) 단위로 이루어져 있다. 바이트 단위라는 의미는 각각의 바이트마다 주소가 정해져 있어서 이 주소로서 서로 구분될 수 있다는 것이다. 실행가능한 C프로그램은 code와 data로 이루어져있다. code는 C 소스코드의 각 명령어들을 번역한 기계어 인스트럭션들을 의미하고, data는 C 소스 코드의 변수들을 의미한다. 이 변수들이 선언되고 초기화될 때, 각 변수에 자료형에 맞는 크기의 (적어도 한.. 2022. 10. 22.
반응형