본문 바로가기

프로그래머

[포프 tv 복습] 나만의 라이브러리 만들기, C99 나만의 라이브러리 만들기 C에서도 라이브러리를 만들 수 있다 오브젝트 파일을 모아 라이브러리로 만듦 다시 컴파일할 필요 없이 코드 재활용이 가능 소스 코드 공개 없이(단, 헤더 파일은 예외) 라이브러리 배포 가능 C에서는 두 종류의 라이브러리를 만들 수 있다고 했음 정적 라이브러리 동적 라이브러리 (복습) 정적 라이브러리와 링크 정적 라이브러리와 링크하는 것을 정적 링킹이라고 함 라이브러리 안에 있는 기계어를 최종 실행파일에 가져다 복사함 동적 링킹에 비해 실행 파일의 크기가 커짐 메모리를 더 잡아먹을 수 있음 실행 속도가 빠름 보통 정적 라이브러리를 사용하는 절차 소스 코드들을 컴파일하여 정적 라이브러리를 만듦 보통 파일 하나 물론 여러 개의 라이브러리를 만들면 파일도 여럿 확장자는 *.lib(윈도우 .. 더보기
[포프 tv 복습] 전처리기 전처리기 전처리기로 할 수 있는 일들 다른 파일을 인클루드 전처리기 지시문 #include을 사용 매크로를 다른 텍스트로 대체 #define, #undef와 전처리기 연산자 #, ##를 사용 소스파일의 일부를 조건부로 컴파일 전처리기 지시문 #if, #ifdef, #ifndef, #else, #elif, #endif를 사용 일부로 오류를 발생시킴 전처리기 지시문 #error를 사용 매크로 대체 : #define #define 식별자 대체_목록(선택) #define A (10) 전처리기가 소스 코드 뒤지다가 A가 보이면 모두 (10)으로 바꿔줌 #define A 이것도 가능 하지만 바꿔줄 내용이 없음 그 대신 다른 전처리기 지시어로 A가 정의 돼 있는지 판단 가능 #define TRUE(1) #define.. 더보기
[면접 대비] C를 사용한 해시 맵 구현 size_t hash_65599(const char* string, size_t len) { size_t i; size_t hash; hash = 0; for(i = 0; i > 16); } 충돌까지 고려한 해시 맵 예 int add(const char* key, int value, size_t (*hash_func)(const char*, size_t)) { size_t i; size_t start_index; size_t hash_id; hash_id = hash_func(key, strlen(key)); start_index = hash_id % BUCKET_SIZE; i = .. 더보기
[면접 대비] C를 사용한 linked list 구현 연결 리스트 전체를 출력하는 코드 예 typedef struct node{ int value; node_t* next; } node_t; void print_node(const node*t head) { node_t* p = head; while(p != NULL){ printf("%d", p->value); p = p->next; } } 헤드 노드 node_t* head = NULL; 해제코드 void destroy(node_t* head) { node_t* p = head; while(p != NULL){ node_t* next = p->next; free(p); p = next; } } node_t* haed = NULL // 생략 destroy(head); head = NULL; 삽입코드 맨 앞에.. 더보기
[포프 tv 복습] C 자료구조 기초 자료구조 기초 자료구조란? - 컴퓨터에서 여러 자료들을 조직적, 체계적으로 저장하는 방법 - 보통 동일한 자료형을 여럿 저장하는 ㅜㄱ조를 의미 - 자료구조에 따라 요소들 사이의 관계를 정의하는 규칙이 있음 - 다음 요인에 따라 상황마다 보다 효율적인 자료구조가 존재 - 데이터에 접근하는 빈도 - 데이터에 접근하는 방법(ex. 삽입, 검색, 읽기, 지우기 등) 자료구조의 효율성 - 효율성은 주로 시간 복잡도를 말함 - 공간 복잡도를 포함하는 경우도 있음 - 따라서 주로 Big-O 표기법을 사용 - 보통 효율성을 논할 때는 하드웨어 최적화를 고려 안 한 이론이 전부 - 적은 용량의 데이터는 그렇지 않을 수 있음 배열 메모리 한 덩어리로 표현 가능한 가장 간단한 자료구조 여러 자료들을 그 메모리 덩어리 안에 .. 더보기
[포프 tv 복습] 레지스터, 스택 & 힙, 동적 메모리. 다중 포인터 레지스터, 스택 & 힙, 동적 메모리. 다중 포인터 메모리의 종류 프로그램에서 주로 사용하는 부품은 CPU 메모리 메모리는 또 다시 나뉘는데... 스택 메모리 힙 메모리 기본은 힙 메모리 힙 메모리가 범용적인 기본 형태 스택은 특별한 용도를 가진 메모리 프로그램마다 특별한 용도에 사용하라고 별도로 떼어놔 준 것이 스택 메모리 엄밀히 말하면 그 프로그램의 thread마다 CPU 안에도 저장공간이 있음 레지스터 : CPU에서만 사용할 수 있는 고속 저장 공간 엄밀한 의미의 메모리는 아님 레지스터 메모리를 읽고 쓰는 게 느린 이유 CPU가 메모리에 접근할 때마다 버스를 타야 함 대부분 컴퓨터에 장착하는 메모리는 DRAM임 DRAM은 가격이 저렴한 대신, 한 가지 큰 단점이 있음 기록된 내용을 유지하기 위해서 .. 더보기
[포프 tv 복습] 가변 인자 함수, 올바른 오류 처리 방법 가변 인자 함수, 올바른 오류 처리 방법 가변 인자 함수 (, ...); 정해지지 않은 수의 매개변수(가변 인자)를 허용하는 함수 반드시 최소 한 개의 정해진 자료형의 매개변수가 필요 가변인자는 '...'로 표현 가변 인자 함수의 예 #include int add_ints(const size_t count, ...) { va_list ap; int sum; sisze_t i; sum = 0; va_start(ap, count); { for(i = 0; i < count; i++){ sum += va_arg(ap, int); } } va_end(ap); return sum; } int main(void) { int result; result = add_ints(1, 16); printf("result: %.. 더보기
[포프 tv 복습] 구조체, 공용체, 함수 포인터 구조체, 공용체, 함수 구조체, 구조체의 필요성 구조체 데이터의 집합 여러 자료형을 가진 변수들을 하나의 패키지로 만들어 놓은 것 주소를 전달하지 않는 한 값형 구조체의 필요성 사람은 세상을 바라볼 때 물체 단위로 봄 구조체를 사용하면 실수도 막을 수 있다 같은 형의 데이터 여러 개를 매개변수로 받을 때 순서가 바뀌면 컴파일러가 실수를 찾을 방법이 없음 실수를 줄이려면 원자성을 보장하는 연산(atomic operation)을 사용하는 게 좋음 구조체의 선언 및 사용 세미콜론 잊지 말 것. struct date{ int year; int month; int day; }; date란 구조체. 변수명은 date. struct date date; 함수의 매개변수로도 사용 가능 int is_moday(struct.. 더보기
오늘의 복습 | C++ 11 | lambda function | binary tree | linked list #C++11에서 추가된 핵심 기능 auto 자료형을 추론 실제 자료형은 컴파일 하는 동안 결정됨. 따라서, 반드시 auto 변수를 초기화해야 함. static_assert 컴파일 중에 assertion 평가 컴파일러가 assert 조건이 참인지 아닌지 앎 실패하면 컴팡리러는 컴파일 에러를 뱉음 default/delete default 키워드를 사용하면, 컴파일러가 특정한 생성자, 연산자 및 소멸자를 만들어 낼 수 있음 그래서, 비어 있는 생성자나 소멸자를 구체화할 필요가 없음 또한 기본 생성자, 연산자 및 소멸자를 더 분명하게 표시할 수 있음 컴파일러가 자동으로 생성자를 만들어 주길 원치 않는다면 delete 키워드 사용 private 접근 제어자로 빈 생성자를 만드는 트릭은 이제 그만 올바른 에러 메시.. 더보기
[Pytorch] RNN으로 문장 학습시키기 아래의 문장의 RNN 모델을 통하여 모델링 한다. sentence = ("if you want to build a ship, don&#39;t drum up people together to collect wood and don&#39;t assign them tasks and work, but rather teach them to long for the endless immensity of the sea.") a. 위의 문장을 이용하여 모델을 학습 시킬 때 10문자씩 잘라서 학습시킨다. b. 학습 완료 후 학습 시 사용했던 입력 데이터를 이용하여 결과물을 출력한다. 전체코드 import torch import torch.nn as nn import torch.optim as optim import nu.. 더보기