Struct의 size 이런 경우에는 8 + 4 + 2 = 14 bytes 일 거라고 예상하기 쉽지만 그 이유는 메모리 엑세스 패턴 때문에 컴파일러가 padding 패딩을 사이에 넣어주기 때문이다. 구조체 struct나 클래스 class의 경우에는 padding이 들어가게 되기 때문이다. 클래스/구조체 멤버 정렬 - padding _ 링크 Class의 size : function은 class의 size와 관계 없다. Cat 포인터를 저장하는 변수 catPtr를 하나 만들고 cat1의 주소를 넣어주고 catPtr 의 크기를 출력해보는 프로그램을 만들어보자. 포인터의 경우에는 타입과는 상관없이 항상 8 bytes를 갖는다. (64bit) -> 그 이유는, 포인터는 격자무늬 메모리 구조에서 각각의 주소를 나타..
변수
sizeof() : 변수의 사이즈를 알아내는 방법 예제) 1 byte = 8 bit. 컴퓨터는 0과 1로 동작하는데, 그 단위가 1bit. 8bit는 이런 0과 1로 동작하는 칸이 8개 있다는 의미. int 타입은 4byte 를 가지고 있다. a 변수를 할당하는 순간 4byte의 공간을 차지한다는 의미. 정수 short int long = 2 4 8 byte 양수정수에는 unsigned를 붙여주면 됨. 실수 float double = 4 8 byte cppreference에서 각 변수 타입의 크기를 체크해보면 이렇다. https://en.cppreference.com/w/cpp/language/types Fundamental types - cppreference.com (See also type for ..
Stack Variables 스택 변수 : 변수가 많아질수록 메모리 공간이 위로 쌓여간다고 하여 stack. 컴퓨터가 변수를 인식/접근하는 방법 : 메모리 맵에서 가장 위에서부터 몇 번째에 위치하고 있는지로 구분한다. 변수의 이름을 기억하지 않는다. 예제) 이 때, 우리가 생각하는 추상적인 메모리 구조는 이런 느낌이다. 하지만, 실제 작동하는 stack 메모리 구조를 추상적으로 표현해 보면 이런 식이다. 각 변수의 주소를 출력해서 실제로 그런지 확인해 보자. Stack 메모리의 주소가 큰 수(a)에서 작은 쪽으로(d) 쌓여 나간다는 것을 실제로 확인해 볼 수 있다. 즉 이런 식이다! 더 로우 레벨로 내려가면 실제 메모리 구조는 격자 무늬로 되어 있다. 그렇다면 이런 모양으로 구성되었을 것이다. 주의점! ..
변수의 종류 파악하기 지금까지 변수와 배열을 사용했던 곳은 main() 함수 안이거나 직접 만든 함수 안이었다. 그러나 변수와 배열의 선언은 반드시 함수 안에서만 해야 하는 것은 아니다. 변수와 배열은 함수 바깥에서도 선언 가능하기 때문이다. 함수 안에 선언한 변수를 지역 변수(local variable), 함수 바깥에 선언한 변수를 전역 변수(global variable) 이라고 부른다. 스코프의 원리 이해하기 지역 변수와 전역변수는 어떤 차이점이 있을까? 먼저 지역 변수(local)의 경우, 선언된 함수 안에서만 사용할 수 있다. 반면 전역 변수(global)는, 어떠한 함수에서도 사용할 수 있다. 밑의 그림은 각각의 변수의 유효 범위를 그림으로 표현한 것이다. 이러한 변수 이름의 통용범위를 가리켜 ..