-
[SW 정글 38일차] calloc과 realloc부터 시작해서 git 정리까지기타/SW 사관학교 정글 2021. 9. 9. 02:22
오늘은 레드블랙트리 구현을 마치고 복습과 구현이라는 목표를 이루기 위해 궁금했던 것이나 복습을 해야되는 부분을 알아보며 얻은 것들을 정리하려고 한다.
1. malloc과 calloc, realloc
malloc에 대해서는 아래의 글에서 설명한 바 있다.
https://straw961030.tistory.com/220
동적메모리할당을 위해 사용되는 함수가 malloc만 있는 줄 알았지만 찾아보니 calloc, realloc 2가지가 더 있었다.
남은 2가지에 대해 정리해보고 차이점을 보려고 한다.
- calloc이란?
void *calloc(size_t n, size_t size)
calloc은 malloc과 마찬가지로 사용자가 원하는 만큼 동적으로 메모리를 할당해주고 heap영역에 할당받는다.
함수에서 받는 인자를 보면 malloc과 달리 2개로 size와 그 size에 대한 개수(n)을 받아 size * n만큼의 공간을 할당받는 것이다.
malloc과의 차이는 메모리를 할당받았을 때, 메모리를 전부 0으로 초기화한다는 것이다.
-realloc이란?
void *realloc(void *memblock, size_t size)
realloc은 할당된 메모리를 다시 할당할 때 사용한다. realloc을 선언하기 전에 이미 malloc이나 calloc으로 할당했던 포인터와 다시 할당하고자할 때 원하는 size를 인자로 전달한다.
이 때, 메모리에 존재하는 데이터는 기존에 있던 값과 변함이 없다.
- 동적으로 2차원 배열 할당하기
위에서 본 동적 메모리할당은 1차원 배열에 해당한다.
그러면 2차원 배열을 동적으로 할당받고 싶다면 어떻게 해야할까?
일단은 malloc, calloc으로 1차원 배열의 메모리를 힙에 할당하고 1차원 배열 안(원소)에 1차원 배열을 다시 할당하면 된다.
코드를 보면 아래와 같다.
int **arr = malloc(sizeof(int *) * n); for (i = 0; i<n; i++) arr[i] = malloc(sizeof(int) * m);
2. 자주쓰는 git 명령어 정리하기
- git을 이용하여 무언가(commint, clone ,,,)한다면 그 이전에 내가 누구인지 git에게 알려주는 작업을 위한 명령어이다.
git config --global user.name "your name"
git config --global user.email "your email- 새로운 local repository를 만들었다면 아래의 명령어로 초기화를 해준다.
git init
- remote repository를 나의 local repository에 clone(복붙과 같은 개념)을 하기 위해 사용하는 명령어이다.
git clone [path to repository]
- 다른 사람의 public remote repository를 clone한 것을 내가 새로 생성한 repository에 clone 하고자 할 때 사용하는 명령어이다.
명령어를 입력하는 path는 public remote repository를 clone한 local repository이다.
git push --mirror [path to my repository]
- local에서 기존에 있던 것에 대한 작업(수정, 삭제)혹은 새로 생성한 파일(추가)에 대해 git에 추가를 하기 위해 사용하는 명령어이다.
git add <filename>
git add *- add한 파일(들)에 대한 간단한 설명을 포함하여 commit하기 위해 사용하는 명령어이다.
git commit -m "commit message"
// message 없이 commit하고자 할 때
git commit -a- commit한 파일(들)을 remote repository의 branch에 변경정보를 보내기 위해 사용하는 명령어이다.
git push <branchname>
- local 환경에서 작업 후에 발생한 변경사항들을 알려주는 명령어이다.
git status
- branch를 변경, 추가, 조회,삭제하기 위해 사용하는 명령어이다.
// branch를 새로 생성 후, 생성한 branch로 들어가기
git checkout -b <branchname>
// 원하는 branch에 들어가기
git checkout <branchname>
// branch 조회하기
git branch
// branch 삭제하기
git branch -d <branchname>
[오늘의 나는 어땠을까?]
오늘은 하루의 시작을 늦게 시작했다.
사실 어제의 끝을 오늘 오전 6시에 했기때문에 어쩔 수 없이 하루의 시작을 오전 11시에 하게 됐다.
수면시간은 이전과 다를 바 없이 5시간이기 때문에 피곤함의 정도는 크게 차이는 없지만 몸이 붕 뜬 기분은 든다.
하루에 정한 목표를 반드시 이루기 위해 시간을 투자하여 성공시킨 것은 기쁘지만 건강에는 좋지 않은 것은 확실하다.
그래도 어제?(오전 6시에 마무리 했지만..) RB트리 구현을 마무리했기때문에 오늘 복습을 할 수 있는 시간이 충분했고 다른 동료들이 구현 방법에 대해 물어보는 것을 답변해주면서 더욱 내 것으로 만들 수 있었다.
내일부터는 새로운 주제를 받아 또 다른 팀원들과 한 주를 보내게 된다.
이번 주에 만족도는 최최최상이여서 내일, 한 주의 시작도 기대가 되고 새로운 것을 배운다는 것이 매우 흥미로울 것 같다.
<참고 자료>
https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html
https://reakwon.tistory.com/20
'기타 > SW 사관학교 정글' 카테고리의 다른 글
[SW 정글 39일차] Process를 공부하면서 static변수까지 (0) 2021.09.10 SW 정글 5주차 회고 (0) 2021.09.09 [SW 정글 37일차] 레드블랙트리 삽입, 삭제 (0) 2021.09.08 [SW 정글 36일차] 레드블랙트리 개념 익히기 (0) 2021.09.07 [SW 정글 35일차] 동적 메모리 할당 (링크드리스트, 이진탐색트리) (0) 2021.09.06