2024/06 6

[Memory Structure] 변수 타입

1. Fundamental Types   타입 사이즈 및 메모리라고 해서 각 변수나 클래스, 혹은 포인터가 메모리 상에 어떤 크기로 allocation 되는지 알아봅시다.    이전 글에서, 간단한 코드를 만들어서 int 3개와 double 1개를 allocation하여 각 메모리 주소를 알아보았습니다. 그리고, 더 low level로 내려가면 이러한 격자 무늬 속에서 각각의 변수가 그 사이즈에 맞는 공간을 차지하고 있다고 알아보았습니다.  변수의 사이즈는 sizeof() 함수를 통해 확인할 수 있습니다.    그런데 주의해야 할 점은, int는 컴파일러나 아키텍처에 따라 2byte 혹은 4byte로 적용될 수 있다는 점 입니다.       2. Variable size 확인   이럴 땐 크게 두 가지 ..

: : C++ 2024.06.29

[Memory Structure] Variable in Memory

1. Variables in Memory            (Variables => Stack)    Code 영역실행 코드, 전역상수, static 전역상수 부분이 영역의 정보는 read only로서 절대 변경되지 않아야 한다.컴파일할 때, 크기가 정해진다.   Data & Bss 영역Data 영역은 초기화된 static, 초기화된 전역변수 부분Bss 영역은 초기화되지 않은 전역변수, 0으로 초기화된 전역변수, 초기화되지 않은 static 변수, 0으로 초기화된 static 변수가 올라오는 부분Bss 영역에 올라오는 모든 변수는 0으로 초기화된다.컴파일할 때, 크기가 정해진다.   Heap 영역동적으로 할당해준 변수(malloc, new)가 올라오는 부분먼저 들어간 데이터가 가장 먼저 나온다.(FIF..

: : C++ 2024.06.28

C++14 STL 철저 입문

아이버 호튼 지음 / 조현태 옮김길벗2016​Using the C++ Standard Template LibrariesIvor HortonApress2015​​  1장.  표준 템플릿 라이브러리 1장에서는 표준 템플릿 라이브러리에 내재된 기본 개념부터 설명하겠다.- STL에는 무엇이 있는가?- 템플릿을 정의하고 사용하는 법- 컨테이너는 무엇인가?- 반복자는 무엇이고 어떻게 사용하는가?- 스마트 포인터의 중요성과 컨테이너를 사용하는 법- 알고리즘은 무엇이고 응용하는 방법- 수치 라이브러리가 제공하는 기능- 함수 객체는 무엇인가?- 람다 표현식을 정의하고 사용하는 방법​이 장에서는 STL을 지탱하는 기본 아이디어도 소개하지만, 이어지는 장에서 자주 사용하기 때문에 익숙해져야 할 C++ 언어의 기능도 소개할 ..

리눅스 커널(Linux Kernel) 전처리 파일 생성하기

1.  리눅스 커널 전처리 파일 생성하기    1.1  전처리 코드 생성 목적   리눅스 커널 소스 코드를 분석하다 보면 수 많은 매크로를 만납니다. 그런데 이 매크로가 소스 분석의 큰 걸림돌입니다. 리눅스 커널에서 캡슐화와 다형성과 객체지향 방식을 구현하다 보니 매크로로 구현된 코드가 많습니다.   전처리 코드는 이 매크로를 모두 풀어서 표현합니다. 따라서 훨씬 편하게 소스 코드를 분석할 수 있습니다. 리눅스 커널 코드를 분석할 때 전처리 코드를 함께 보시기를 희망합니다.   전처리 코드는 GCC 컴파일 오브젝트를 생성하는 과정에서 추출됩니다.      1.2  전처리 코드 생성 ​ 먼저 리눅스 커널 전체 소스 코드를 전처리 파일로 추출하는 방법을 소개합니다.  01 diff --git a/Makefi..

[가상화] 1. 가상화 개념 정리(KVM/QEMU)

1. 가상화   가상화란 한 대의 시스템 하드웨어를 논리적으로 분할하여 가상의 시스템에 활용하는 개념이다. 가상 시스템들은 서로 독립적인 하나의 시스템으로 인지되기 때문에 주어진 하드웨어 리소스를 효율적으로 사용할 수 있다. 새로운 하드웨어 자원을 구비하고 시스템을 구축하는 것 보다 있는 자원을 활용하기 때문에 비교적 간결하고 쉽게 시스템을 올릴 수 있다. 호스트 OS를 기저에 두고 호스트를 중앙 시스템으로 하는 중앙 집중형의 서비스를 구축하기에 적절하다.   가상화를 이야기하려면 하이퍼바이저(Hypervisor)를 빼 놓을 수 없는데, 가상 OS와 실제 하드웨어 자원 사이에 위치하며 둘 사이의 괴리를 조정해주는 역할을 하는 것으로 볼 수 있다. 이 과정을 '추상화'라고 하는데, 물리적인 하드웨어 자원을..

clean(), cleansstate(), cleanall()

yocto에서 작업한 레시피에 대해, clean, cleansstate, cleanall 태스크로 작업된 레시피 결과물을 제거할 수 있다.   -c clean$ bitbake -c cleanrecipe의 작업 디렉토리(${WORKDIR})에, unpack 이후에 수행했던 모든 태스크 결과물을 제거한다.   -c cleansstate$ bitbake -c cleansstatedo_clean() + sstate 까지 제거한다.sstate가 잘못된 경우가 있는데, 컴파일 중 전원이 나가는 등의 예상치 않은 빌드 실패 시, sstate 까지 싹 지우자.   -c cleanalldo_clean() + do_cleansstate() + DL_DIR 에 저장된 다운로드 데이터도 제거한다.$ bitbake -c ..