C 주솟값 팁

Yoon Sunkue·2021년 10월 22일
1

노트

목록 보기
5/9

C 표준은 malloc 으로 생성된 모든 주소값들이 4의 배수임을 보장한다.

왜 그런지는 제껴두고 이게 무슨 뜻이냐? 할당받은 모든 주솟값은 0b???????00 , ?{0,1} 즉 모든 주솟값의 첫 두 비트는 0임이 보장된다는 것이다. 이를 어떻게 활용하는가? reinterpret_cast 와 >> << 로 두 비트에 다른 값을 넣어 두개 이상의 정보를 한 단어에 담을 수 있다는 말이다. 주소 + X + Y => 0b주주주주주주주주소XY 이렇게 압축시킨 데이터는 어디다가 쓰는가? atomic연산에 활용할 수 있다. 주로 cas 연산에 사용된다.

MSVC
x86, std::malloc으로 할당 0x???0 | 0x???8. => 0b????000; 3비트사용가능
x64, std::malloc으로 할당 0x???0. => 0b???0000; 4비트 사용가능

테스트코드
while(true) { auto x = std::malloc(rand() % 100); cout << x << "\n"; }

0개의 댓글