프로그래밍/공부

왜 구조체는 16바이트가 넘지 않을 때 사용하는 것을 권장할까??

MSDN에선 다음과 같은 조건을 만족하지 않는 한 class를 사용하는 것을 권장한다

 

 1. 논리적으로 기본 자료형과 유사한 단일 값을 표현할 때

 2. 인스턴스의 크기가 16바이트 이하의 크기를 가졌을 때

 3. 불변일 때

 4. 박싱(Boxing)이 빈번하게 일어나지 않을 때

 

물론 그냥 보고 넘어갈 수도 있겠지만,

하지말라던지 권장한다던지 이러면 더 좋다던지 등의 글이 있을 때 '왜??' 라는 의문이 들기 마련이다

그래서 찾아보았더니 이런 글이 있었다.

 


이에 대한 비밀은, SSE(Streaming SIMD Extensions) 레지스터와 연관이 있습니다.

x86 인텔 CPU의 경우 128비트 크기의 SSE 레지스터를 xmm0 ~ xmm7까지,

64비트인 경우 추가로 xmm8 ~ xmm15를 가지고 있는데,

바로 이 레지스터를 사용하기 때문에 128비트,

즉 16 바이트 크기에 대해서는 레지스터 하나로 처리할 수 있어 구조체의 권장 크기가 된 것입니다.


 

글쓴이 분께선 ".NET Disassembly" 창을 띄워 직접 확인해주셨으니 더 궁금하다면 아래 글을 참고하면 될 것 같다.

나도 화이팅해서 더 깊은 지식을 가진 프로그래머가 되어야지..

 

 

참고 출처: www.sysnet.pe.kr/2/0/12620 [성태의 닷넷 이야기]