본문 바로가기

Programing

메모리의 누수 현상 전산학에서 메모리 누수(memory leak) 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다. 일부 서적에서 메모리 손실이라는 용어로 뜻을 옮기기도 하지만[1] leak라는 표현은 단순히 잃는 것 이상의 개념이므로 누수라는 표현이 더 정확하다. 결과 프로그램을 실행하는 동안, 시간이 가면 갈수록 메모리를 더 많이 잡아 먹는다. (서버에서의 백그 라운드 작업에서 이러하기도 하지만, 특히 임베디드 장치에서도 여러 해 동안 이러한 문제가 지속되었다.) 컴퓨터 게임을 하거나 동영상의 프레임을 렌더링할 때 새로운 메모리가 수시로 할당된다. 프로그램을 종료해도 해당 프로그램은 실제로 종료되지 않고 공유 메모리.. 더보기
[리스트] 연결리스트 연결리스트의 개념 : 포인터를 이용하여 구현하는 리스트. 하나의 노드에 자료와 링크가 포함되어 있다. 연결리스트의 특징 : 최대 원소 갯수를 지정이 필요없다 -> 저장되는 원소의 개수 예상이 어려울 경우에 사용 추가 원소 이동 연산이 불필요하다 -> 원소의 추가/삭제가 빈번히 발생하는 경우에 사용 동적인 메모리 할당 및 포인터 연산등으로 인해 배열 리스트보다 구현 비용이 높다 메모리 관리와 관련하여 메모리 누수 오류의 발생이 크다. 탐색 연산의 비용이 높다 -> 원하는 원소를 찾기 위해 포인터로 노드 검색 연결리스트의 제일 마지막 노드는 연결되는 다음 노드가 더 없으므로 NULL값으로 설정 연결리스트와 배열리스트의 차이점 리스트를 포인터를 이용하여 구현 - > C포인터를 이용하여 물리적으로 멀리 떨어진.. 더보기
Struct와 typedef struct의 차이 struct tagFoo { int foo; }; struct tagFoo Alber; Alber라는 구조체가 생성된다. C++에서는 태그이름만으로 변수를 생성할 수 있지만, C에서는 struct 키워드를 생략하면 태그명만으로 변수를 정의할 수 없다. => tagFoo Alber; // C: 에러, C++ : 통과 C에서는 변수 선언이 가능한 키워드로 시작할 때에만 변수 선언을 인식할 수 있도록 되어 있다. 따라서, enum, union, struct등 사용자 정의 타입은 그냥 선언한 이름만 쓰면 변수 선언으로 인식할 수 없으므로, C컴파일러에게 어떤 타입인지를 알려주어야 한다. 매번 어떤 타입인지를 알려주는 것이 불편하므로, typedef를 이용하여 되었다. typedef struct tagFoo { .. 더보기
배열 배열의 크기 1차원 배열 : a[i] = i+1 2차원 배열 : a[i][j] = (i+1)(j+1) 3차원 배열 : a[i][j][k] = (i+1)(j+1)(k+1) 2차원 배열의 위치 -a[m, n]으로 정의된 2차원 배열에서 a[i, j]는 몇번째 요소인지 알아보는 법(b=지정된 기본 주소) -행 중심 순서 배열의 요소의 위치 : p = n(i-1)+j 기본 주소가 지정된 경우 : p=b(a)+n(j-1)+i-1 요소의 크기가 지정된 경우 : p=b(a)+(n(i-1)+j-1)*ElementSize -열 중심 순서 배열 요소의 위치 : p=(j-1)+i 기본주소가 지정된 경우 : p=b(a)+n(i-1)+j-1 요소의 크기가 지정된 경우 : p=b(a)+(m(j-1)+i-1)*ElementSize.. 더보기
리스트 리스트 : 자료를 순서대로 저장하는 자료 구조 일직선으로 서로 연결되어 있기 때문에 선형 구조의 특성이 있다. 선형구조 - 리스트, 스택, 큐, 덱 등이 포함됨 리스트의 예 문자리스트 : 문자 자료를 차례대로 연결하는 리스트, 문자열이라고도 한다. D A T A 저장되는 자료 : 각각의 문자 문자열 리스트 : 문자열 자료를 차례대로 저장 D A T A \0 \0 A R R A Y \0 저장되는 자료가 문자열이기 때문에 문자열의 제일 마지막 글자가 '\0(NULL)'이다. 빈 공백 문자열의 첫번째 문자는 '\0'이다. 행렬 1 2 3 4 5 6 7 8 9 다항식을 저장하는 리스트 : 계수의 값을 저장한다. 1 2 3 4 5 ↓ x^4+2x^3+3x^2+4x+5 리스트의 추상 자료형 리스트 사용에 필요한 기.. 더보기
[리스트] 배열리스트 배열 리스트 : 배열을 통해 구현한 리스트 메모리 상에 순차적으로 저장 논리적 순서와 물리적 순서가 같다. 배열 리스트의 기본적 연산: 원소 추가(addElement()) - 중간에 원소를 추가할 경우 원소들의 이동이 필요함 ( 논리적인 순서 보장 - 배열의 특징이다) 원소 제거(removeElement()) - 중간에 있는 원소를 제거 할 경우 원소들의 이동이 필요 ( 논리적인 순서 보장 : 배열의 특징이다 ) 배열 리스트 만들기 : 필요한 기능 배열리스트의 생성 원소 추가 - 임의의 위치에 추가, 마지막 위치에 추가 원소 제거 리스트 원소 반환 리스트 순회 배열 리스트 제거 더보기