728x90
바이트 패딩
바이트 패딩(Byte Padding)이란 클래스(구조체)에 바이트를 추가해 CPU 접근에 부하를 덜어주는 기법
32 Bit PC에서...
: 32 bit PC는 메모리에서 4byte(32bit) 씩 가져와서 연산을 한다.
>> 32bit 단위 패딩이 되어있는게 가장 유리하다.
왜?
예를 들어
class A
{
int a;
bool b;
int c;
}
라고 되어있을 때, bool 형인 b를 읽고 c를 읽으려면 다음 4바이트를 또 읽어야 한다. <위 그림 참조>
>> CPU가 두번이나 메모리를 갔다 와야 함 ( 되도록 캐시에서만 처리하는게 퍼포먼스가 좋다. < 이전글 참조 > )
극한의 퍼포먼스를 위해선 Padding을 해야 한다.
+)
Class A {
4byte
4byte
4byte
1byte
1byre
};
위 처럼 4바이트 정렬을 하는게 더욱 좋다.
++)
bool -> 1바이트 필요없지않음? 1비트면 충분하잖아 ( 0,1 만 있으면 되니까 )
1byte가 필요한 이유 : byte 당 메모리주소가 매겨지니까..... 버려지는 7비트가 아깝긴하다.
+ 재밌는 사실: 클래스에 불형 하나만 둬도 4바이트가 된다 : 어처피 패딩때문에
+++)
CPU <-> GPU 차이
CPU ( 32bit 환경에선 ) 4byte
:종합적으로 뭔가를 처리하기위해 만들어지기 위해 나옴 , 복잡한계산( 캐시가 그만큼 크다.)
16byte 패딩 ? 상수버퍼에서
GPU : 단순계산을 빠르게 한꺼번에 처리하기위해 태어난 구조.
목적성이 나와있음 Graphic 처리.
결과적으로
바이트 패딩을 하면 메모리적으로 낭비를 할 수도 있지만, 이해 하고 사용하면 성능 향상에 도움이 된다.
728x90
'STUDY > 이론 정리' 카테고리의 다른 글
이동생성자, RValue 레퍼런스 (0) | 2022.06.08 |
---|---|
LValue? Rvalue? (0) | 2022.06.08 |
캐시 미스 (0) | 2022.06.04 |
배열 , 연결리스트 ? (0) | 2022.06.03 |
CPU, 랜덤 엑세스, 메모리 구조란? (0) | 2022.06.03 |