카테고리 없음

PC성능은 점점 좋아지는데, 프로그램은 점점 무거워지는 이유2

안녕1999 2018. 9. 8. 23:30

PC성능은 점점 좋아지는데, 프로그램은 점점 무거워지는 이유2


10년이 지나고, 20년이 지나도, 프로그램은 언제나 무겁기만 하다.

많은 사람들이, "더 많은/좋은/고급 기능이 추가되서"라고들 한다.

맞는 말이기도 하지만, 진짜 원인은 다른데 있기도하다.


"C언어보다는 C++언어가 더 좋다?"

꼭 그렇지만은 않다.

빠르고, 간단 명료한 기능을 작성할때는 C언어가 더 나은 경우가 많다.

C++언어는 "Class 와 상속"이라는 기능을 사용하여, 더 복잡하고, 큰 규모의 프로그램을 비교적 안정적으로 작성할 수 있다.

그러나, Class의 은닉(숨김) 기능으로 인해, 프로그래머들은 해당 Class가 정확히 어떤 동작을 하는지 모르고 사용하는 경우가 종종있다.

사실, 종종이 아니라, 상당수가 그렇다.

평균적으로 C++로 작성한 프로그램은 C로 작성한 프로그램보다 매우느리다.


2018년 최근에는 Class도 많이 쓰지만, STL등도 많이 사용한다.

std:vector, 탬플리트 등을 많이 사용한다.

STL이 좋은점도 많지만, Class와 마찬가지로 은닉(숨김) 성격이 강해서, 내가 작성한 한줄의 코드가 어떻게 동작하는지 모르는 경우도 많다.

물론 작동하니 그냥 쓰는 경우가 대부분이다.

STL의 vector등을 사용하는 경우, 가장 큰 문제는 여러가지 형의 비슷한 변수를 사용할 경우, 코드 크기가 매우 커질 수 도 있다.

또한, 변수끼리의 대입연산시, 메모리복사가 흔하게 발생한다.


PC프로그램이 느려지는 가장 큰 이유는 해당코드가 정확하게 어떻게 작동하는지 모르고, 사용하는 경우가 많기 때문이다.

프로그램좀 짠다는 비트코인 프로그래머들도 STL+Class+템플리트로 도배를 해놓았다.

STL+Class+템플리트를 잘못사용할 경우, 대부분 프로그램코드가 커지고, 매우 느려진다.


포인터로 참조하면, 몇 clock으로 처리될 일을, 대입연산으로 사용하여 수십~수백 clock으로 처리하는 경우도 많다.


간단히 요약하면, 프로그램코드에 대한 정확한 지식이 없이, "동작하니깐", "남들이 많이 쓰니깐" 아무생각없이 프로그램을 작성해서,

프로그램이 점점 무거워지고, 버그도 많이 발생하게 된다.


물론 C언어가 버그가 많은건 사실이나, 이는 제대로 변수 초기화를 안하기때문이다.

C언어가 C++,STL,템플리트 등에 비해 매우 직관적이며, 더 가볍고, 빠른, 효율적인 코드작성이 가능하다.


C언어로 상속기능을 사용할 수 없다고 하는사람들이 대부분인데,

심지어 어셈블러로도 상속기능을 사용할 수 있다.

물론 C++처럼 화려하고 복잡한 상속은 무리인것은 맞지만, 기본적인 상속은 구현이 가능하다.


C언어의 포인터만 잘 활용해도, 훨씬 빠르고, 작은 프로그램 작성이 가능하다.