블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2025.6
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

공지사항

최근에 올라온 글

C언어가 진보된 언어는 맞지만, 진보된 언어가 속도도 빠른것은 아니다.

2019년 요즘은 대부분의 프로그래머들이 클래스를 주로 사용한다.

문자열 하나 다루는데도 클래스를 사용한다.

거의 모든것을 클래스로 처리한다.

C언어가 구시대적인 언어는 맞지만, 속도면에서는 대부분 C++의 클래스를 능가한다.

클래스는 초기화, 파괴 과정이 거의 필수이기 때문이다.

큰 규모의 기능이 아니라면, C언어로 작성하는것이 속도면에서는 훨씬 유리하다.

요즘 PC는 10,20년전 PC보다 몇배, 수십배 성능이 향상됐지만,

그때나, 지금이나 PC가 벅벅벅~ 느린것은 똑같다.

"PC가 빠른데 뭐가 문제냐?"는 식이다.

비트코인 소스도 대부분 클래스화가 되었고, 사용하는데는 지장은 없다.

하지만, 우리는 너무 큰 비용을 지불하고 있다.

물론, 모든 경우에 다그런것은 아니다. 대부분은 그렇다는 말이다....

가장 좋은 방법은 적당히 타협하는것이다.

한두번 쓰는 기능을 위해, 클래스 만들고, 생성하고, 로드하고, 파괴하고, 이럴 필요가 있냐는 말이다.

그냥 전역변수에 로드만 해서 사용해도 큰문제가 없는 경우가 대부분이다.

클래스로 만들다보면, 배보다 배꼽이 더 큰경우도 자주 목격된다.

거기에 템플리트로 떡칠을 해놓았다면, 이 프로그램이 어떻게 돌아갈지는 예상하기 힘들다.

예를들면, 이전에 C로 작성된 프로그램이, 클래스와 템플리트 코드로 재탄생한 경우,

버그가 줄어들고 잘 돌아갈지는 몰라도, 프로그램의 크기나 속도, 메모리 사용에 있어서는 PC를 힘들게 하는경우가 대부분이다.

얼마전에도 클래스, stl로 도배된 함수를 하나 분석해서 다시 작성해보니, 해당 함수는 안해도 될것을 열심히 하고 있더라...

C언어로 간략하게 다시 작성해놓으니, 절반가량 줄어든것 같다.

물론, 메모리도 적게 쓰고, 속도도 더 빠르다.


"차라리 어셈블러를 쓰지?"

필요하면 쓰지요. 바보가 아닌이상, 적당한 타협이 필요합니다.

도아니면 모가 아니라, 적당히 골라서 사용하라는 말입니다.

C언어로 구현이 힘들면 C++로 하라는 말입니다.

C언어로도 충분히 되는걸 C++로 해놓으면, 전체적으로 코드가 커지고, 느려진다는것을 얘기하는것입니다.


C++, 클래스, 템플리트를 많이 사용할 수 록, PC는 더 느려진다는 것은 사실입니다



템플리트를 사용하다보면, 타입이 명확하지 않아서, 타입 비교기능도 만드는 경우도 종종 있습니다.

물론 복잡한 코드입니다.

실제로 어떻게 동작하는지 아는 사람은 별로 없을겁니다.

템플리트를 사용해도 많아봐야 4~8가지 종류만 사용하고, 대부분은 2종류이상 사용하지 않는 경우가 대부분입니다.

차라리 처음부터 타입을 명시하고 작성한다면, 더 쉽게 해결되는 경우도 많습니다.

타입을 템플리트로 처리하니, 전체적인 메모리 소요량 파악도 쉽지 않습니다.

템플리트간의 충돌로 에러가 발생하는 경우, 디버깅이 더 어렵게 됩니다.

좋은 점도 있지만, 나쁜점도 있습니다.

제일 좋은것은, 누구나 명확하게 소스를 분석할 수 있는 쉬운 코드가 가장 좋다고 봅니다.



STL, 템플리트, 클래스등을 사용하다보면, 메모리할당이 발생하기 쉽습니다.

CString의 경우에도 내부적으로 메모리할당을 하는 경우가 많습니다.

메모리할당은 시간이 많이 걸리는 작업입니다.

문자열 몇글자 복사하려는데, 메모리할당까지하면, 프로그램이 느려집니다.

대부분의 경우에는 스택변수(자동변수)로 프로그래머가 미리 메모리를 할당하여 사용할 수 있습니다.

이 경우에는 스택에 있는 메모리라서, 보통 수백kbyte까지는 안전하게 비용없이, 매우 빠르게 사용할 수 있습니다.

CString으로 메모리할당이 발생하게되면, 2~수십배의 속도가 느려집니다.

예) char buf[1024];

strcpy(buf,str1);

strcat(buf,"abc");

프로그램이 한줄 더 늘어나고, 코딩이 약간 귀찮지만, 속도는 훨씬 빠릅니다.

네. 그냥 C언어입니다. C++이 나오고나서, 너무나 천대받는 그냥 C입니다.


C언어가 나쁜게 아니라, 그걸 제대로 못쓰는 프로그래머가 문제인거죠.

목수가 연장탓하는것과 같습니다.

물론 연장이 중요합니다. 누구나 쉽게 사용할 수 있는 연장이라면 더 좋은거죠.




"What does T&& (double ampersand) mean in C++11?"

템플릿(template)사용하는 중에, 위와 같은 질문을 발견했습니다.

저는 C언어 C++언어를 사용하는 프로그래머입니다. 템플릿쪽은 잘 모르죠.

하지만, C언어 프로그래머가 자바를 잘몰라도, 문맥은 대충 알 수 있습니다.

그런데 저런식이면, 알 방법이 없죠.

이런 사용방식은 코드를 더 난해하고 복잡하게 만듦니다. 사용하는 본인은 잘 알겠죠.

하지만, 정작 어떻게 구현되고 동작되는지는 본인도 잘 모를겁니다.

모르니깐 그냥 가져다쓰고, 나중에 보니 저코드때문에 메모리도 2배, 속도도 2배로 느려지는 경우도 심심치않게 발견됩니다.

디버깅할때는 참 어렵죠. 벌써부터 한숨나오려고합니다.

물론, 당사자는 쉽겠죠.

Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함