본문 바로가기

C

c++ stack 공간, class, struct, 타입별 메모리 사이즈

공부한 거 정리

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<int5> 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<int100> catsStack;
    std::array<int300> 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