IT 그리고 정보보안/환경설정 및 기타

C 프로그램 퍼포먼스에 대한 메모

plummmm 2021. 4. 17. 09:49
반응형

내가 들은 강의에서 주안점으로 본 것은

"실제 프로그래머들은 어떻게? 무엇을? 왜?" 라는 점이다.

실제로 필드에서 일하시는 분들이 신경쓰는 부분, 책에선 알 수 없는 내용.

"어떻게 효율적으로 프로그래밍을 하는가?"

"무엇을 사용해야 효율적인 프로그래밍이 가능한가?"

"내가 대충 넘어간 부분을 저 사람은 왜 중요하다고 말하는가?"

기본적인 문법, 내용 등은 컴퓨터 전공인 관계로 알고 있는 내용이 많았다.

하지만 실제로 코딩할 때는 책에서 쉽게 알 수 있는 지식도 물론 중요하지만

실제 경험을 바탕으로 나온 노하우 등으로 인한 미세한 변화가 큰 결과를 낳을 때가 많다.

강의를 듣는 내내 그런 꿀(?)같은 정보가 없나 귀를 쫑긋하고 들었다.

먼저 연산에 대한 내용이다.

1. 이항 연산보다 단항 연산이 훨씬 퍼포먼스가 좋다.

예를 하나 들어서 봅시다.

현재 값에서 1이 증가된 값을 얻고 싶다.

여기서 쓸 수 있는 연산은 add와 inc가 있다.

근데 둘 차이가 뭔가? add는 이항 연산, inc는 단항 연산이다.

add는 사용하려면 현재 항에 1을 더한 값을 다시 대입한다 ( i = i + 1)

inc는 증감연산자, 그냥 현재 항에 1을 증가시키는 것이다. ( i++ )

i = i +1 을 사용하게 되면 컴파일 과정에서 ADD 연산으로 변하고,

i++ 를 사용하게 되면 INC 연산으로 변한다.

두개의 항을 두고 한쪽에서 연산을 하고 또 대입해야 되는게 빠른가.

그냥 자기 값에 1더하는게 빠른가. 뭐 그런 단순한 원리이다.

한가지 더 예를 들자면, xor연산 예가 있다.

i = i ^ i i = 0 결과는 동일하다. (xor은 다르면 1, 같으면 0 이니까.)

근데 연산 속도는? 전자가 훨씬 빠르다.

"아니 대입 연산(=) 있는데 똑같은거 아니냐?" ㄴㄴ 아님

i = i ^ i 는 i 값 내에서 변화하기 때문에 단항 연산이다. 그래서 더 빠르다.

2. 조건문에서 확률이 높은 조건이 위에 오도록 하는 것이 퍼포먼스에 좋다.

사실 어떻게 보면 당연한 소리일 수도 있다. 하지만 이렇게 정립시켜두는 것이 좋지 :)

확률이 낮은 조건을 먼저 오도록 둔다면, 조건문이 프로그램이 불필요한 코드를 읽게 되니까

당연히 높은 조건을 위에 두는게 퍼포먼스에 좋다.

(여담으로 조건문으로 switch문은 모양이 안이뻐서 잘 안쓴다고...다들 잘 안쓰니 그냥 안쓰는게 좋을듯)

3. 조건문에서 조건을 작성할 때 상수를 앞에 두는게 오류검출에 효율적이다.

보통 일반적으로 우리가 if문으로 조건문을 작성한다고 칩시다.

if( i == 0) {

.... }

이러한 형태로 조건을 작성한다. 근데 만약 작성자가 실수로

if( i = 0) {

.... }

이렇게 작성했다고 치면.. 컴파일해도 오류검출이 되지 않는다.

i 에 0을 대입하고 그냥 조건문을 실행하는 것이 되므로.

그리하여 상수를 앞에 두어

if( 0 == i) {

.... }

이렇게 작성하라는 말이다.

근데 이 부분에 대해서는 의견대립이 생기는 것 같다.

"저런 바보같은 실수를 하는 사람이 어딨는가. 굳이 가독성 떨어지게 상수를 앞에 둘 필요가 있느냐" 라는 의견과

"1만 라인이 넘는 규모가 큰 프로그램에서 저런 오류가 난다면 어떻게 잡을 것인가? 앞에 둬라" 2가지 의견이다.

난 뭐 두가지 다 틀린말이 아니라고 생각한다. 다만 아직까지는 전자에 익숙해져 있기 때문에..

한동안은 그냥 그렇게 쓰겠지만, 상수를 앞에 두도록 강조하는 회사도 많다고 한다.

반응형

'IT 그리고 정보보안 > 환경설정 및 기타' 카테고리의 다른 글

EVE-NG 에 Dynamips 설치  (0) 2022.04.19
EVE-NG 설치 및 기본 세팅  (0) 2022.04.18
Windows 환경에서 django 설치  (0) 2021.04.17
gdb-peda 설치  (0) 2021.04.17
우분투 CLI 부팅 시키기  (0) 2021.04.17