분류 전체보기 264

[Ubuntu] 성능평가: perf 사용하기

성능 평가를 해야할 일이 있는데.. 과연 이 작업이 유효한가.. 다른 많은 도구들이 있는데 찾아보면 되고.. 그중 FlameGraph를 그릴수 있는 perf + FlameGraph 튜토리얼을 작성하고자 한다. Linux에서는 이것을 사용하고 Windows에서는 vTune이나 AMD uprof를 사용하면 좋다. VS의 성능 프로파일러로는 음 뭔가 확인하는 근거가 어렵다. 먼저 perf + FlameGraph 는 아래의 문서에서 확인할 수 있다. https://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html CPU Flame Graphs CPU Flame Graphs Determining why CPUs are busy is a routine task for p..

Ubuntu, Android 2022.10.17

[Visual Studio] LNK2019: unresolved external symbol

링크 에러... 왜 못찾는 것일까.. 라이브러리를 덤프했을때 외부 기호가 extenral로 함수 이름이 정확히 있었다... 그러면 보통 라이브러리만 링크해도 문제가 없어야 하는데.. 도저히 못할줄 알았지만 다행히 공식 문서와 stackoverflow를 통해 해결할 수 있었다. 원인은 함수 기호 이름의 문제였다. 내가 작업하는 솔루션은 cpp이지만, 라이브러리로 만들어 사용하려는 솔루션은 모두 C 파일이다... 여기서 아는 사람은 cpp의 name mangling에 대해 알고 있을것이다. C 언어와 cpp 언어는 다르며 해당 규약들과 이름에 대해 다르기때문에 똑같이 맞춰줄 필요가 있다... C++ 프로그램에서 런타임 라이브러리 함수를 사용할 수 있도록 하는 구문인 extern "C" 를 사용해서 간단히 해..

C , C++, C# 2022.09.08

[Visual Studio] 라이브러리 덤프하기

c++ softfloat 써드 파티를 사용해야 하는데 이를 라이브러리로 빌드하여 필요한 모듈에 링킹하는 작업이 필요하다. 그런데.. 계속해서 링킹에러가 발생해서.. 열심히 하던중.. CMake Configuration을 잘못했는지 원본의 make를 제대로 안했는지.. 알 길이 없다. 결국 처음부터 다시 시작해 원본의 makefile과 같도록 헤더와 소스파일을 활용하여 컴파일 및 빌드까지 완료해서 라이브러리를 새로 만들었다. 하지만 다른 모듈과 링킹 에러이다... 해당 기호가 진짜 라이브러리에 없는건가.... 이제 라이브러리를 뜯어봐야되는데 어떻게 뜯을 수 있는지 간단히 알아보자. Visual Studio 2022에서 Cmake 프로젝트를 만들면 간단한 샘플 파일을 얻을 수 있다. 샘플 코드는 아래와 같다..

C , C++, C# 2022.09.05

[STACKOverflow] Visual Studio 스택 크기 늘리기, Cmake 적용

이슈 확인중 재현해보니... stack oveflow였고 호출스택을 보니... 같은 함수가 무지막지하게 호출되고 있었다. 해결하는 방법은 많은데 그중 들은건 릴리즈시, 스택 크기를 기본 1MB가 아닌 좀 더 늘려서 하자는 거였다. 음.. cmake인데.. 어떻게하지..? 간단하다. 우선 Visual Studio에서는 프로젝트 속성에서 수정할수 있다. 아래 그림처럼 '링커' -> '시스템' 에서 적당히 고쳐주면 된다. 바이트 크기이다. 그렇다면 cmake에서는 어떻게 할까? 아래 링크를 참조할 수 있다. 먼저, VS에서 링커 옵션중 /STACK 옵션을 사용한다. 이것이 위 그림의 '스택 예약 크기' 이다. 필자의 Cmake는 target(최종 빌드 결과물)이 되는 3개의 바이너리에 target_link_o..

빨간색 에러들 2022.07.24

[C++] restrict keyword: AMP(Accelerated Massive Parallelism)

뭐 분석 오류로 인해서 보고 있었는데 우선 Visual Studio의 이친구였다... 우선 난 첨본다.. 찾아보면 아래에서 알 수 있다. https://docs.microsoft.com/ko-kr/cpp/parallel/amp/cpp-amp-overview?view=msvc-170 C++ AMP 개요 자세한 정보: C++ AMP 개요 docs.microsoft.com 아아아~~ C++의 GPU 기능과 병렬처리를 통해 속도를 빠르게 할 수 있는거구나 그런데 Visual Studio 2022 버전 17.0 부터는 사용을 안하는구나..!? 하고 넘어가면 될듯하다. 안에 기본 예제 정도가 있으니 한번 따라해보면 되는데 내 문제는 아래 헤더 파일의 내용이다. 흠.. restrict..? 아 이 친구가 문제였는데...

C , C++, C# 2022.07.04

[CPU 100%] 컴퓨터 느려짐 / CPU 100% 사용

여느날처럼 컴퓨터를 부팅하면서 매일 뜨는 Docker 업데이트를 보기 싫어서 어차피 윈도우 Docker는 잘 안쓰니 지워버렸다. 그러면서.. 누가봐도 컴퓨터가 갑자기 느려지고 크롬을 실행하는데 버벅이고 그래서 뭔가 문제가 생겼다. 작업관리자도 늦게 켜지고.. 모든게 느렸는데 먼저 CPU 100과 메모리 90 이상이 매우 거슬렸다. 그래서 얘내들을 줄이면 되겠지 하고 보통 구글링 하면 아래와 같을것이다. https://www.maketecheasier.com/fix-windows-100-cpu-usage/ 100% CPU Usage in Windows? Here's How to Fix it - Make Tech Easier Even on a newer PC, it is common to see 100% C..

기타 2022.06.27

복잡한 선언 읽기: C / C++

어쩌다 여러방면의 코드를 얘기한 적이 있었는데.. 복잡한 구문을 쉽게 읽고 쓸수 있는 방안이 있다고 했다. 찾아보니 나선 방향?으로 읽고 이해하면 쉽다고 했다. C에서 Signal 라이브러리 함수를 읽을정도면 완벽히 이해한 것이다. 아래 간단한 예제는 우리 모두 무슨 의미인지 쉽게 알 수 있다. const char *chptr; // pointer to char const char * const chptr; //const pointer to char volatile char * const chptr; // const pointer to chat vo.. 문제는 아래와 같은 예제들이다. 아래 참조를 통해 공부해보자. char *(*fp)( int, float *); void (*signal(int, voi..

C , C++, C# 2022.06.21

[C++] cmd system 함수 / xcopy

작업하는데 코드가 실행될때 디렉토리를 복사하며 그것을 C++ 코드로 실행해야 했다. 찾아보면 금방 확인할 수 있으니 아래에 정리해본다. 먼저, xcopy 명령으로 디렉토리를 복사하는 과정을 해보자. 쉽게 확인할 수 있다. 문제는 복사할 대상 경로를 "....." 큰따옴표로 잘 감싸주자. 그리고 복사할때, /I 옵션을 사용하면 선택문 없이 디렉토리로 가정하여 바로 복사해준다. xcopy /? 명령어를 사용해 모든 옵션을 확인할 수 있으니 필요한 옵션들은 확인하면 된다. 자 이제 해당 명령을 코드로 cmd 명령을 실행하게끔 해보자. 찾아보면 더 많을수도 있지만 필자는 system() 함수를 사용하였다. 그대로 사용할 명령어를 string 타입으로 사용하면 된다. 이스케이프" 쌍따옴표를 잘 사용하면 쉽게 사용..

C , C++, C# 2022.05.30

[Visual Studio] error: lnk1112 module machine type x64....

32비트 바이너리를 매일 빌드하는데... 최근 사내 업데이트로 바이너리를 x64 비트로 빌드해야 하는 작업을 하고 있다. VS code에서는 configuration을 아래 그림과 같이 편하게 잡아주기 때문에? 금방 작업할 수 있는데... Visual Studio는 상단에 실행 / 디버그 쪽에 x64를 체크하면 되는걸로 알고있다. 하지만!? 없는 경우가 있었고 임의로 사용 확장 가능한 아키텍처를 임의로 고르다 보니 여러 이상해졌다. 구성 관리자가 Win32 밖에 없었고... 뭐 새로 추가해서 마음대로 하니 빌드가 안돼고 이상해졌다. 그래서 프로젝트 속성(C/C++ , 링커)과 솔루션 속성에 들어가서 확인해봤는데 별로 문제가 없어보였다. 명령줄에 machine 옵션, 솔루션 구성 설정에 들어간 라이브러리 ..

빨간색 에러들 2022.05.25

[Cmake] add_custom_target / .cmake file

한번의 명렁어로 여러 target은 cmake -B [build directory] --target all 과 같이 모든 target을 빌드할 것이다. 그런데 내가 좀더 구분짓고 싶은것은 일부 타겟만 빌드할수 없을까 이다. 그래서 Cmake를 조금 찾아보면 custom target을 통해 이를 해결할 수 있다. 그리고 이를 .cmake 파일을 통해 만들었다. .cmake는 마치 스크립트와 같은 느낌으로 이해하면 되는데 function() 을 사용하여 CmakeLists.txt 에서 해당 function의 이름을 호출하면 실행되는 방식으로 이해할 수 있다. 위와 같이 CmakeLists.txt에 cmake 파일의 경로를 include하고 function의 이름으로 호출하면 .cmake 파일의 내용을 실행한..

C , C++, C# 2022.05.18