1l cache memory 등을 고려하여 코드를 짜야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <iostream>
#include <array>
class alignas(32) Cat // 메모리를 32byte의 배수로 만든다
{
public:
void speak();
private:
// 위치에 따라 class 크기가 다름
// 가장 큰 변수의 배수에서 메모리 할당이 끝나야 한다
// 따라서 24byte 나올 수 있음
// char를 늘려도 더 올라감
char c1;
int i4a;
double d8;
int i4b;
};
Cat staticCat; // global variable(static 변수 역할)
int main()
{
std::cout << sizeof(Cat) << std::endl; // 16byte
Cat stackCat; // stack에 생성
Cat* heapCatPtr = new Cat(); // heapCatPtr이 stack에 생성
// Cat의 객체는 heap에 생성
// 8byte
delete heapCatPtr;
std::array<Cat, 100> cats;
// 메모리 구조가 24,48,72,96,,, 이런 식으로 간다
// 하지만 L1 cache는 보통 64bytes다
// l1 cache 중간에 메모리가 끊길 수 있다.
// False sharing 문제 생길 수 있음
return 0;
}
|
'C' 카테고리의 다른 글
C++ class copy move constructor, instructor (0) | 2021.06.23 |
---|---|
static function, static variable (0) | 2021.06.23 |
c++ copy elison, Retrun value optimization (0) | 2021.06.23 |
c++ lvalue rvalue zero copy (0) | 2021.06.23 |
c++ heap memory space (0) | 2021.06.22 |