[C, C++] 메모리 직접 접근으로 값 변경, 출력

메모리 직접 접근 C언어에서의 메모리 접근은 포인터를 이용하지만 포인터를 사용하지 않고 직접 접근할 수도 있다. 그러나 일반적으로 커널 영역을 이용하지 않고 하드웨어를 직접 접근하는 것은 위험한 행위라서 권장하지는 않는다. 물론 메모리에 대한 정보를 정확히 알 수 있다면 이 위험성은 덜어낼 수 있을 것이다. 직접 접근할 메모리 확인을 위한 포인터 p를 만들고 값을 넣어준다. 그리고 포인터 … Read more

[C, C++] volatile 변수의 필요성

volatile? C언어의 컴파일러는 똑똑해서 자동으로 코드 최적화를 해주는 기능을 가지고 있다. 예를 들어 아래의 코드에서 for문은 의미가 없는 코드이다. for문 내에 어떠한 내용도 없기 때문이다. 따라서 시간만 잡아먹는 이 의미 없는 for문을 컴파일러가 자동으로 지워버린다. 그러나 volatile과 함께라면 컴파일러는 의미없는 for문이라도 최적화를 하지 않고 실행한다. 위에서 C언어의 컴파일러는 자동으로 최적화를 한다고 했는데, 이는 컴파일러의 최적화 … Read more

[C, C++] 구조체의 패딩비트와 크기 최적화

구조체 크기의 의문점 구조체 크기는 멤버 전체 크기 합과 다른 경우가 많다. 실제로 그런지 확인해보자. 구조체 크기 테스트 ** 아래 결과는 컴파일러에 따라 다를 수 있다. test1 test1 구조체는 int 하나를 포함하므로 4바이트가 예상되며 실제 결과도 그와 같다. test2 test2 구조체는 char 하나를 포함하므로 1바이트가 예상되며 실제 결과도 그와 같다. test3 test3 구조체는 int 하나와 … Read more

[C, C++] 구조체 비트필드로 메모리 용량 확보

필요성 ON/OFF 스위치와 같이 0과 1의 값만 가지는 변수는 C99부터 지원하는 bool 자료형을 사용할 수 있다. 그런데 ON/OFF는 1비트면 충분하지만 bool을 사용하여 1바이트(8비트)나 소모한다. 이때 구조체의 비트필드를 활용하면 1비트만으로 구현이 가능하다. 사용 예 임베디드 제품을 개발하고 있지만 메모리 최적화를 위해서 비트필드를 사용한적은 없다. 그러나 통신을 위해서 사용하고있다. 예를들어 두개의 AP가 UART로 통신하고 있다면 통신 프로토콜을 … Read more