본문 바로가기

전체 글

(236)
C++ 배우기 13(메모리 관리) 메모리 관리(memory management) 컴퓨터 메모리에 적용된 리소스 관리의 일종이다. 프로그램의 요청이 있을 때, 메모리의 일부를 해당 프로그램에게 할당하고, 더 이상 필요하지 않을 때 나중에 다시 사용할 수 있도록 할당을 해제하는 것이다. 그런데 C++ 프로그래밍을 배우면서 메모리 할당과 메모리 관리 부분에서 문제가 발생하기 쉽다고 한다. 그래서 좀 더 완벽한 프로그래밍을 위해서 메모리 관리의 내부 작동 방식들에 대해 이해하고 있으면 좋다고 한다. 오늘 알아볼것은 가비지 컬렉션, 메모리 누수, 메모리 단편화와 같은 메모리 관리 및 문제점들에 대해 조금 알아보고자 한다. 가비지 컬렉션(garbage collection) 쓰레기 수집이라고도 부르는 이것은 메모리 관리 기법들 중의 하나이며, 프로그..
C++ 배우기 12(포인터) 포인터 드디어 정말 어렵고 헷갈리는 부분에 들어오게 되었다. C를 배울 때에도 많이 고생했던 부분이기도 하다... 우선 포인터란, 메모리 주소를 가리키는 도구라고 할 수 있다. 주소값에 접근하기 위한 도구라고 알아두면 된다. 이것도 자료형 중에 하나로, 메모리에 접근할 주소를 저장할 수 있는 타입이다. 크기는 운영체제에 따라서 다를 수도 있는데, 4byte는 32bit 체제의 크기이고, 8byte는 64bit 체제의 크기이다. int a = 5; int* b; //int* : int형 주소를 담을 수 있는 포인터 b = &a; cout
포인터 별찍기 오늘 포인터에 대해서 배웠는데, 포인터... 아직도 많이 헷갈린다ㅠㅠ 열심히 복습하자... for문만을 사용해서 만들었다. #include #include using namespace std; int main() { const char* str1 = "*****"; const char* str2 = " "; //1번 for (int i = 0; i < 5; i++) { cout
달팽이 배열 참고자료 https://tragramming.tistory.com/25 2차원 배열의 응용 - 달팽이 배열 만들기 안녕하세요!! 오늘 포스팅할 내용은 2차원 배열의 3번째 응용 예제, '달팽이 배열 만들기'입니다. 달팽이 배열은 정보처리기사 알고리즘 파트 등에서 빈번하게 출제되는 유형입니다. 그럼 배열은 tragramming.tistory.com 5 4 4 3 3 2 2 1의 순으로 흘러는 것을 알아내긴 했는데, 그 순서를 반복문으로 구현하는 것에 많은 시행착오가 있었다. 결국 구글링을 통해 반복문 구현방법을 찾아냈다. 코드를 외우기보단 이해해야 하는 것이 정말 중요한 부분인 것 같다. #include #include using namespace std; int main() { int snailarray..
C++ 배우기 11(메모리 구조) 포인터를 배우기 전에 우선 메모리 구조에 대해서 알아보려고 한다. 저번에도 말했듯이 게임에서 중요한 것은 최적화라고 했다. 그 최적화를 잘하기 위해 우선 메모리 구조에 대해 알아둘 필요가 있다. 메모리 메모리는 프로그램이 기억해야 하는 것들을 저장하는 곳이다. 때문에 프로그램이 실행되기 위해서는 먼저 메모리에 로드(Load)되어야 한다. 그리고 프로그램에서 사용되는 변수들을 저장할 수 있는 메모리도 필요하다. 그래서 컴퓨터의 운영체제는 프로그램 실행을 위해 다양한 메모리 공간을 제공해준다. 거기서 할당받는 메모리 영역에는 여러 가지가 있는데, 대표적인 메모리 공간은 아래와 같다. 코드(Code) 영역 코드 영역은 우리가 실행한 프로그램의 소스코드가 저장되는 영역으로 텍스트 영역이라고도 부른다. 컴파일 타..
빙고 ver2(문자열) 입력할 때 실시간으로 중복 검출하는 부분에서 많은 고민이 있었다. 뭔가 코드가 좀 난잡해진 것 같은 기분이다... #include #include #include using namespace std; int main() { string bingo[5][5];//빙고 배열 string input; //입력값 변수 int x = 0, y = 0; //출력 도와줄 변수 bool isGoob = true; //중복 검출용 변수 int success = 0, count = 0; //빙고 확인용 변수 //빙고 입력 while (x < 5 && y < 5) //입력 다되면 while문 종료 조건 { cout
C++ 배우기 10(2차원배열) 슬라이드 게임 코딩을 하면서 1차원배열보다는 2차원배열을 적용하는 것이 조금 더 편하지 않을까 하는 생각이 들었다. 따라서 오늘은 2차원배열에 대해 배워보았다. 2차원배열 //1차원배열 int array[25]; //2차원배열 int array[5][5]; 위와같이 2차원배열은 1차원배열 뒤에 한번더 크기를 지정해주면 된다. 사실 이러한 배열은 2차원, 3차원, 4차원까지 여러 차원이 있어서 다차원 배열이라는 큰 묶음 안에 있는 것들 중 하나이다. 그래서 2차원 배열 이상의 배열들을 보통 다차원배열이라고도 부를 수 있다. 2차원배열은 배열 요소로 1차원 배열을 가지는 배열을 말한다. 여기서 array[5][5]의 앞에 [5]는 열의 길이를, 뒤의 [5]는 행의 길이를 의미한다. 예를들면 이런식으로 2차원..
빙고 게임 빙고 검출 부분의 코드가 좀 비효율적으로 된 것 같다... 함수도 다시 정리가 필요할 것 같다. #include #include #include using namespace std; int bingo[5][5]; struct SubP { int x; int y; }; int Randi() { return rand() % 5; } void Swap(SubP a, SubP b) { int temp = bingo[a.x][a.y]; bingo[a.x][a.y] = bingo[b.x][b.y]; bingo[b.x][b.y] = temp; } void Shuffle() { for (int i = 0; i < 100; i++) { SubP num1; num1.x = Randi(); num1.y = Randi(); ..