Rylah's Study & Daily Life

Modern C++ : 01. Memory Structure - Variables Types1 (변수 타입 in Memory) 본문

Study/C++

Modern C++ : 01. Memory Structure - Variables Types1 (변수 타입 in Memory)

Rylah 2022. 2. 3. 05:00
#include <iostream>

int main() {
	int a = 0;
	std::cout << sizeof(int) << std::endl;
	std::cout << sizeof(a) << std::endl;
	return 0;
}

 

 

 

 

 

The following table summarizes all available integer types and their properties in various common data models:

C++가 표준은 알려진대로 integer bit이지만 그렇지만 비트에 따른 메모리 할당이 달라질 수 있다는 것을 명시하고 있는 레퍼런스이다.

#include <cstdint>
#include <iostream>
#include <array> // CPP array는 <array> 사용 권함
int main() {
	static_assert(sizeof(int) == 4, "int is 4 bytes"); // 일치하지 않으면 에러 발생 int 사이즈가 4인지 측정
	//int a = 0;
	std::cout << "size of values " << std::endl;
	std::cout << "Size of Int     : " << sizeof(int) << std::endl;
	std::cout << "Size of int8_t  : " << sizeof(int8_t) << std::endl; 
	std::cout << "Size of int64_t : " << sizeof(int64_t) << std::endl;
	std::cout << std::endl;
	// 메모리 공간을 제대로 설계하기 위한 변수 선언
	int a;
	uint32_t b;
	int8_t d;
	// array
	std::cout << "size of array values " << std::endl;
	int arr[10]; 
	std::cout << "Size of arr[10]       : " << sizeof(arr) << std::endl;
	std::array<int, 5> iarr;
	std::cout << "Size of array<int, 5> : " << sizeof(iarr) << std::endl;
	std::cout << std::endl;

	uint64_t ui8;
	float f4;
	std::array<uint8_t, 5> uia5;
	std::cout << "Size of uint8_t array(5) : " << sizeof(uia5) << std::endl;
	uint64_t* ui64ptr = &ui8;
	std::cout << "int64_t ptr              : " << sizeof(ui64ptr) << std::endl;
	std::cout << "ui8 Address              : " << (uint64_t)ui64ptr << std::endl;
		
	return 0;
}

포인터는 32비트에서는 4바이트 64비트에서는 고정적으로 8바이트를 가진다.

Type bytes
long 4 bytes
int 4 bytes
short 4 bytes
int32_t 4 bytes
int64_t 8 bytes
array<int, 5> 20 bytes
ptr 8 bytes

컴퓨터는 top 위치에 몇번째 있냐만 계산을 한다.

ui64ptr -> ui8(address) : 162064219928
uia8
 
 
 
 
f4
ui8

https://youtu.be/msA5NvdrEA4