참고 : https://blog.naver.com/kimwontae466/222439087086
1) 멤버 변수가 한개만 존재할 경우
-> 4바이트의 크기가 출력됨.
2) 데이터형 다르게 존재할 경우에는 패딩이 발생하기도 한다.
-> 16바이트의 크기가 출력될 줄 알았지만, 24바이트가 출력되었다.
: 메모리 할당 정책 때문이다. 총 2가지가 있으며, 모두 만족해야 한다.
-> 따라서 double d8은 0에서 시작하거나 8에서 시작해야 한다.
그래서 i4a와 d8사이에는 4바이트의 패딩이 발생한다.
-> 따라서 가장 큰 d8의 크기는 8이므로 8의 배수인 24에서 끝난다.
: cpu는 멀티코어를 가지고 있다. cpu는 데이터 접근 시간을 최소화 하기 위해 캐시를 사용하며, 캐시 라인이 있다.
캐시 라인은 64바이트이다.
각각의 코어들은 캐시를 가지고 있어서, 동일한 캐시를 접근할 경우 Cash Sharing이라는 문제가 발생할 수 있다.
캐시라인 구조때문에 데이터 집합이 64바이트씩 잘라져서 다른 코어에 들어갈수 있다.
-> 해결하는 방법으로는 alignas 키워드를 사용하면 클래스의 크기가 한정된다.
패딩 공간을 뒤에 덧붙여준다.
=> 고양이 데이터가 잘려서 각각의 코어에 들어가는 것을 방지할 수 있다.