공부한 거 정리
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include <iostream>
#include <cstdint>
#include <array>
struct ST
{
int a;
int b;
};
struct ST2
{
int a; // 4
int b; // 4
short c; // 2
// 메모리 padding 때문에 크기가 12로 나온다
};
class Cat
{
public:
void printCat();
private:
int age;
float weight;
// Function을 제외하고 결과적으로 8byte가 나옴
};
int foo(int arg)
{
int a = 0;
int b = 1;
int d = arg + a + b;
return d;
}
int main()
{
static_assert(sizeof(int) == 4, "Error occurred!");
int a;
int b[10];
uint64_t ui8;
std::array<int, 5> ia;
uint64_t* ui64ptr = &ui8;
uint32_t c;
int8_t d;
Cat cat1;
Cat* catPtr = &cat1;
std::cout << sizeof(int8_t) << std::endl;
std::cout << sizeof(int64_t) << std::endl;
std::cout << sizeof(b) << std::endl;
std::cout << sizeof(ia) << std::endl;
std::cout << sizeof(ui64ptr) << std::endl;
std::cout << (uint64_t)ui64ptr << std::endl;
std::cout << "size of struct ST: " << sizeof(ST) << std::endl;
std::cout << "size of struct ST2: " << sizeof(ST2) << std::endl;
std::cout << "size of class CAT: " << sizeof(Cat) << std::endl;
std::cout << "size of a pointer of class CAT: " << sizeof(catPtr) << std::endl;
return 0;
}
|
stack에 지정해야 하는 경우 heap에 지정해야 하는 경우
그리고 stack heap global(static)의 메모리구조는 어떠한지
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <iostream>
#include <array>
#include <vector>
int ga = 0; // global(static)
class Cat
{
public:
private:
int m_age;
};
void foo(int num)
{
// Heap
std::vector<Cat> cats(num);
};
bool bar(int num)
{
constexpr int maxCats = 1000;
if (1000 < num)
{
return false;
}
// Stack
std::array<Cat, maxCats> cats;
};
int main()
{
// c++에서 용량이 작다면 stack에 할당이 맞다.
// int, double, float <- stack
// std::array<int,300> a; -> stack
// stack
Cat cat;
std::array<int, 100> catsStack;
std::array<int, 300> a;
//heap
std::vector<int> b(500000); // 2mb
std::vector<Cat> cats(100000);
// std::vector<int> b(500000); // 2mb -> (heap)
//dynamic memory allocation -> heap allocation
int count;
std::cin >> count;
std::vector<Cat> dynamicCats(count);
//what if we need performance
//std::array (stack array)
//std::vector (heap array) ->STL에서 자세히 다룰 예정
// stack vs heap vs static 비교
// stack
int sa = 0;
std::cout << "&sa : " << (long)&sa << std::endl;
// heap
int* hap = new int;
std::cout << "&ha : " << (long)hap << std::endl;
delete hap;
// global
std::cout << "&ga : " << (long)&ga << std::endl;
return 0;
}
|
'C' 카테고리의 다른 글
c++ lvalue rvalue zero copy (0) | 2021.06.23 |
---|---|
c++ heap memory space (0) | 2021.06.22 |
c++ extern static 기록 정리 (0) | 2021.06.22 |
c++ preprocessor 공부기록 ifdef, replace (0) | 2021.06.22 |
[C언어] 최소공배수 구하기 (정보처리기사 외) (0) | 2019.06.18 |