728x90

분류 전체보기 84

[C언어] 메모리 누수(Memory Leak)란?

메모리 누수란 프로그램이 실행되는 동안 동적으로 할당된 메모리(`malloc()`, `calloc()`, `realloc()` 등)를 사용한 후 필요가 없어졌음에도 불구하고 해제하지 않은 경우에 발생한다. 메모리 누수 발생 원인1. `malloc()`이나 `calloc()`같은 함수로 메모리를 할당하고 사용 후 해제(`free()`)하지 않은 경우 메모리 누수가 발생한다.int *arr = (int *)malloc(100 * sizeof(int));// free() 호출이 없어 누수 발생 2. 동적 메모리 할당 후, 해당 메모리를 가리키던 포인터를 덮어쓰거나 변경하면 원래의 메모리 주소에 접근할 수 없게 된다.int *ptr = (int *)malloc(10 * sizeof(int));ptr = NULL..

C언어 2024.10.29

[C언어] 래퍼 함수(Wrapper Function)란?

래퍼 함수는 기존의 함수나 기능을 감싸서(Warp) 제공하는 함수이다. 래퍼 함수는 이매 존재하는 함수를 감싸는 방식으로 추가적인 기능을 추가하거나, 특정 함수 호출을 간단하게 만들어 코드의 재사용성을 높이는 역할을 한다. 이를 통해 코드의 가독성, 유지보수성, 그리고 이식성을 향상시킬 수 있다. // 파일에 데이터를 쓰기 위한 코드 (래퍼 함수 사용 전)FILE* file = fopen("data.txt", "w");if (file != NULL) { fprintf(file, "Hello World\n"); fclose(file);} else { perror("File open failed");} // 파일에 데이터를 쓰기 위한 래퍼 함수 (래퍼 함수 사용 후)void writeFile..

C언어 2024.10.28

[C언어] extern란?

extern 키워드는 다른 파일에서 선언된 변수나 함수가 존재하며, 그것은 현재 파일에서도 사용할 수 있도록 알리는 역할을 한다. 이를 통해 변수나 함수가 여러 파일에서 공유될 수 있도록 한다. 즉, 외부에서 선언된 변수나 함수를 참조하게 만드는 것이다. A.c#include int sharedVariable = 10; // 전역 변수 정의void printMessage() { // 함수 정의 printf("Hello from A.c\n");} B.c#include extern int sharedVariable; // 외부 변수 선언extern void printMessage(); // 외부 함수 선언int main() { printf("Value of sharedVariable: %d\n",..

C언어 2024.10.28

저항이란?

저항은 전기적인 흐름을 방해하는 소자이다. 저항이란 단어 그대로 전류의 흐름을 제한하거나 막는 역할은 한다. 전류가 회로를 통해 흐를 때, 저항이 높으면 전류의 흐름이 어려워지고, 저항이 낮으면 전류가 쉽게 흐른다. 저항의 크기 옴(Ω)이라는 단위로 측정된다. 저항의 종류1. 고정저항(Fixed Resistor) : 일정한 저항 값을 가지는 저항이다.2. 가변저항(Variable Resistor) : 저항 값을 조절할 수 있는 저항이다.3. NTC 및 PTC 서미스터(Thermistor) : 온도가 따라 저항 값이 변하는 저항이다. 저항은 회로에서 전류의 흐름을 제어하고 제한하는 역할을 한다. 만약 저항이 없다면, 과도한 전류로 인해 회로에 손상이 발생할 수 있다. 또한 전압 분배의 역할도 한다. 전압을..

전기•전자 2024.10.25

연산 증폭기(Op-Amp)

작은 신호를 크게 만들어주는 전자 부품이다. 예를 들어, 아주 작은 소리를 더 크게 만들어 주는 확대경 같은 역할을 한다. 연산 증폭기두 개의 입력 간 전압 차이를 크게 증폭하는 고이득 전압 증폭기이다. 이상적인 연산 증폭기는 무한대의 개방 루프 이득(Open Loop Gain), 무한대의 입력 임피던스, 0의 출력 임피던스를 가지며, 다양한 아날로그 연산을 수행할 수 있다.비반전 입력(+) : 이 입력에 신호가 들어오면 출력은 입력 신호와 정비례하며 증폭된다.반전 입력(-) : 이 입력에 신호가 들어오면 출력은 입력 신호와 반비례하며 증폭된다. 출력 : 두 입력 간 전압 차이를 증폭 신호가 출력된다.연산 증폭기는 보통 비반적 입력, 반전 입력, 그리고 출력 핀을 가지며, 이와에도 전원 공급 핀(V+, ..

전기•전자 2024.10.24

루프 언롤링(Loop Unrolling)이란?

컴퓨터 프로그램의 성능을 최적화하는 중요한 기법 중 하나이다. 반복문을 수동으로 변경하여 반복 횟수를 줄이고, 코드의 성능을 높이는 방법이다. 주로 오버헤드를 줄이고 캐시 효율을 높이는 데 사용된다. 다음과 같은 반복문이 있을 때for (int i = 0; i  루프 언롤링을 적용하면 아래와 같다.for (int i = 0; i 위와 같이 루프 언롤링하면 반복 횟수가 줄어들어 오버헤드 감소가 가능하다.

CS 2024.10.23

[C언어] 세미콜론(;)을 사용하는 이유

C언어에서 세미콜론은 명령어의 끝을 나타내는 중요한 역할을 한다. 명령어마다 세미콜론을 사용하여 끝을 명확히 구분해야 컴파일러가 코드의 각 부분을 제대로 이해할 수 있다. 그렇다면 왜 하필 세미콜론일까. 역사적 전통C언어는 ALGOL 계열의 언어에서 많은 영향을 받았다. ALGOL은 세미콜론을 문장의 끝을 나타내는 기호로 사용했다. 이후 C의 전신인 B 언어와 Pascal 같은 언어들도 세미콜론을 명령어 구분 기호로 채택했다. C언어도 이러한 전통을 계승하며 세미콜론을 구분 기호로 사용하게 되었다.  또 다른 이유들로 가독성을 높이기 위해, 문장의 구분을 명확히 하기 위해, 다른 기호와 충돌을 피하기 위해 등이 있지만 가장 큰 이유는 역사적 전통인 것 같다. 세미콜론은 항상 최선의 선택은 아닐 수 있다...

C언어 2024.10.23

2의 보수(Two's complement)란?

2의 보수를 알기 전에 1의 보수를 알아야 한다.1의 보수란 모든 비트를 반전시켜 양수를 음수로 변환하는 방법이다. 즉, 0을 1로, 1을 0으로 바꾸는 것이다.예를 들어, 8비트로 양수 10을 표현하면 00001010이 되는데, 이를 1의 보수로 변환하면 11110101이 된다. 이 방식은 음수를 나타내는 간단한 방법이지만, 덧셈을 수행할 때 문제가 발생할 수 있다. 특히, 1의 보수를 사용한 경우 결과에 대해 캐리 비트를 따로 처리해야 하는 문제가 있다. 2의 보수는 1의 보수를 이용해 음수를 표현하는 좀 더 발전된 방법이다. 1의 보수를 구한 후, 여기에 1을 더하면 2의 보수를 얻을 수 있다. 똑같이 8비트로 양수를 10을 표현한 00001010의 1의 보수는 11110101이며, 여기에 1을 더..

CS 2024.10.23

[C언어] unsigned int flags -1 에 대해서

C와 C++ 프로그래밍을 하다 보면 모든 비트를 1로 설정하기 위해 다양한 방법이 사용된다.unsigned int flags = -1;unsigned int flags = ~0;unsigned int flags = 0xFFFFFFFF; 위의 방법이 어떻게 동작하는지, 가장 이식성 있는 방식은 무엇일까. unsigned int flags = -1;이 방법은 음수 값을 unsigned 타입에 할당하는 형태이다. C 표준에서는 signed 값을 unsigned로 변환할 때 모듈로 연산을 수행한다. 플랫폼마다 unsigned int의 크기가 달라도 항상 최댓값으로 설정되므로 이식성이 뛰어나다.unsigned int flags = ~0;~0은 비트 NOT 연산을 통해 0의 비트를 반전시켜 모든 비트를 1로 만든다..

C언어 2024.10.23
728x90