728x90

2024/10/23 5

루프 언롤링(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