기타
-
[SW 정글 35일차] 동적 메모리 할당 (링크드리스트, 이진탐색트리)기타/SW 사관학교 정글 2021. 9. 6. 02:40
오늘은 C언어를 배우고 c언어를 이용해서 연결리스트, 이진탐색트리를 구현하면서 상용한 동적 메모리 할당과 잘못 사용하면 발생할 수 있는 메모리 누수에 대해 정리해보려고 한다. 우리는 배열을 배우면서 우리가 데이터를 저장하고자 할 때 필요한 메모리의 양을 확정적으로 알려줘야 했다. 그 이유는 우리가 정적으로 생성하는 배열은 메모리 영역 중 stack 영역의 메모리에 저장되고 stack에서 메모리는 컴파일 시점에 결정된다. 즉, 사용자가 '이만큼 원해요'를 컴파일러에게 반드시 알려줘야한다는 것이다. 아래의 그림은 메모리 구조이다. 정적으로 메모리 할당을 해야한다면 항상 고정적으로 메모리의 양을 알려줘야하기때문에 비효율적인 경우가 생길 수 있다. 그냥 그때 그때 우리가 원하는 만큼만 받아서 사용하면 편리할텐데..
-
[SW 정글 34일차] 알수록 신기한 C언어기타/SW 사관학교 정글 2021. 9. 5. 02:19
오늘은 목요일에 5주차 과제를 부여받고 나서 계속 공부해오던 C언어에 대해 정리해보려고 한다. 특별히 주제를 잡아서 정리하기 보다는 오늘 공부하면서 python에서는 느낄 수 없었던 C언어의 매력에 빠지게 된 요소들을 정리하려고 한다. 1. 포인터의 연산 우선, 포인터에 대한 내용을 정리한 글에서도 말했지만 포인터도 일반적인 변수처럼 type을 가지고 있다고 했다. #include int main() { int *pointer; int a = 5; pointer = &a; } 이렇게 코드를 짜면 pointer라는 int형 포인터변수에 a의 시작주소가 들어간다. 그러면 pointer + 1은 무엇일까? 보통은 int형 변수에 + 1을 하면 그 값의 + 1된다. 즉, a에 + 1을 하면 6이 된다. 하지만,..
-
[SW 정글 33일차] gcc 알아보기기타/SW 사관학교 정글 2021. 9. 4. 02:33
어제는 가상 소프트웨어를 처음 접하면서 가상화에 대해 공부했는데 오늘은 내가 짠 C언어 코드를 컴파일하기 위한 도구인 gcc라는 컴파일러에 대해 공부해보려고 한다. 1. GCC (GNU Compiler Collection)란? GCC는 GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러 중 하나이다. GNU 프로젝트에 대해 간단히 말하면 GNU's Not UNIX의 줄임말로 유닉스와 호환될수 잇도록 만들어진 일종의 operating system으로 open source software이다. GCC는 초기에 C언어만을 지원했던 컴파일러였지만 현재는 C++, Objective-C, Fortran, Ada, Go 등 다양한 언어에서 쓰일 수 있는 컴파일러이다. 2. GCC의 컴파일 과정 컴파일 과정..
-
[SW 정글 32일차] 가상화를 맛보다기타/SW 사관학교 정글 2021. 9. 3. 02:37
오늘은 C언어로 Red=Black 트리를 구현하기 위해 윈도우OS인 나의 컴퓨터에서 우분투 OS로 환경을 만들기 위해 가상화 소프트웨어인 VMware를 처음 사용해보았다. VMware를 사용하기 전에는 MS에서 제공해주는 WSL2를 설치하여 Ubuntu20.04 앱을 깔아서 running시키는 형식을 시도했다. 이러한 과정에서 가상화라는 개념이 중요하다고 생각이 들어 정리해보려고 한다. 1. 가상화란? 가상화는 물리적인 하드웨어 장치를 논리적인 객체로 추상화하는 것을 말한다. 추상화라는 단어... 컴퓨터 시스템에서는 굉장히 자주 쓰이는 단어인 것같다. 조금 더 직관적으로 말하면 기존에 가지고 있던 하드웨어를 여러개처럼 동작시키거나 혹은 여러 개의 장치를 묶어 하나의 장치인 것처럼 사용자에게 공유자원으로 ..
-
SW 정글 4주차 회고기타/SW 사관학교 정글 2021. 9. 2. 21:32
[4주차 회고] 2021년 09월 02일 목요일, 4주차가 마무리 되는 날이고 4주차는 전체적으로 어땠는지 이 글을 쓰면서 돌아보려고 한다. 4주차는 재능의 영역(?)이 중요하다고 느껴지는 DP와 그리디에 대해 공부했다. 사실 따로 무언가를 더 공부했다기 보다는 문제에 대한 접근 능력을 기를 수 있는 알고리즘이라고 생각한다. DP와 그리디가 뭔지 알아도 문제를 보고 어떻게 접근해야하는지 감이 안온다면 코드를 쓸 수조차 없다. 되도록이면 새로운 문제들을 접해보면서 문제를 보는 눈을 키울려고 노력했고 마지막 알고리즘 모의고사는 역시나 어려웠다. 그래도 꾸준히 노력하면 재능의 영역 근처는 가지 않을까 싶다. 이제 알고리즘 주차는 마무리가 됐고 오늘부터는 3주 간 C언어를 사용하면서 RB 트리, malloc, ..
-
[SW 정글 31일차] 오늘은 C 포인터기타/SW 사관학교 정글 2021. 9. 2. 01:57
오늘은 어제에 이어 C언어를 공부했다. C언어의 장벽인 포인터 공부를 했고 아직은 이해할만한 영역이라고 생각한다. 일단은 포인터를 써서 뭔가 구현한 것은 아니여서 어려움을 느끼지는 못했지만 내 것처럼 잘 쓰면 좋겠다. 1. 포인터란? 포인터(pointer)는 직관적으로 의미하는 것을 말하면 '가리키는 것'이다. int, float, char 형(type)과 같은 변수와 마찬가지로 포인터(pointer)도 하나의 변수이다. 포인터는 변수로서 메모리 상에 위치한 특정 데이터의 시작 주소값을 보관한다. c언어에서는 변수를 선언할 때 int형인지 char형인지 미리 같이 선언하여 해당 변수가 어떠한 type의 데이터를 담을지를 알려준다. 포인터(pointer)도 마찬가지로 int, char 같은 형(type)을..
-
[SW 정글 30일차] C언어는 배열부터 맛보기기타/SW 사관학교 정글 2021. 9. 1. 02:03
오늘은 이번 주 목요일부터 사용하게 될 C언어의 기본 문법을 공부했다. C언어를 접하는게 처음이 아니고 앞 부분의 내용은 형태는 다르지만 어느정도 python을 통해 알고 있는 내용이여서 C언어의 벽을 느끼게 하는 포인터부터 공부하려고 했다. 하지만, 포인터를 공부하면서 같이 나오는 것이 배열이라는 것이였고 배열부터 차근차근 공부해야 포인터를 알아볼 때 좋을 것같아 배열을 공부하기 시작했다. 1. 배열 알아보기 배열을 알아보기 전에 C언어에서 값을 메모리를 다루는 형식을 먼저 봐보자. C언어에서 메모리를 다룰 때에는 변수(variable)을 통해서 메모리에 값을 읽고 쓰고를 한다. 어떠한 타입을 가지고 있는 변수의 이름 하나느 변수의 타입에 해당하는 만큼의 공간을 메모리 상에서 차지하고 있다. 예를 들어..
-
[SW 정글 29일차] @lru_cache기타/SW 사관학교 정글 2021. 8. 31. 01:33
오늘은 이번 주에 같은 조가 된 동료가 알고리즘 문제를 풀면서 사용했다는 @lru_cache라는 것을 알아보려고 한다. 외장 라이브러리를 불러와서 쓰는 것이여서 코테에서 막힐 수도 있지만 알아두면 좋은 것같다. 1. functools 모듈 @lru_cache는 functools 모듈에 속해있는 데코레이터이다. 그러면 @lru_cache를 알아보기 전에 functools 모듈에 대해 알아보자. functools 모듈은 python 표준 라이브러리 중 하나로 고차함수(함수를 반환하거나 다른 함수를 인수로 사용하는 함수)로 작업하기 쉽게 해주는 기능을 제공한다. 공식문서 상에는 functools 모듈에 12개의 데코레이터가 정의되어 있고 오늘 알아볼 lru_cache를 제외하고 다른 것들도 알아보고 싶다면 공..