전체 글

C#, 유니티 게임 개발자
필요 사전 지식 메모리 동적 확보, 배열의 동적인 확보 메모리 동적 확보, 배열의 동적인 확보 참고 nybot-house.tistory.com/9 변수와 스코프(지역변수와 전역변수) 02.14" data-og-description="변수의 종류 파악하기 지금까지 변수와 배열을 사용했던 곳은 main() 함수 안이거나 직접 만든 함수 안이었다.. nybot-house.tistory.com C++ 는 사용자가 메모리 관리를 직접 해 주어야 하는 Unmanaged Language이다. 메모리 관리에 실패하게 되면 Memory leak, Memory fragmentation 등의 문제가 일어날 수 있다. 힙 메모리를 정확하게 이해한다면 이런 문제들을 피해 프로그래밍을 할 수 있다. Stack VS Heap 비교..
스택 메모리는 흔히 생각하듯이 변수a 변수b 이런 식으로 쌓여가면서 동작하지 않는다. 실제로 스택 메모리는 변수별로 쌓여가는 것이 아니라 Stack Frame 단위로 메모리를 쌓아가면서 동작한다. 이 Stack Frame은 Function 단위로 나누어지고 호출된다. Call Stack foo() 함수 내에서 a b 둘 중 누가 위에 위치할지는 컴파일러가 정해준다. bar() 함수 내에서도 마찬가지. main()함수 내에서도 마찬가지다. (1) 함수가 실행되면 main 함수가 가장 먼저 실행되면서 쌓여진다. (2) foo() 함수를 call 하면서 그 foo()의 stack frame을 그대로 가져와서 위에 쌓는다. (3) foo() 함수가 끝나고 bar() 함수를 호출되면, foo() 부분 메모리를 없..
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) 쌓여 나간다는 것을 실제로 확인해 볼 수 있다. 즉 이런 식이다! 더 로우 레벨로 내려가면 실제 메모리 구조는 격자 무늬로 되어 있다. 그렇다면 이런 모양으로 구성되었을 것이다. 주의점! ..
1. 문자열 중간 자르기 *Function Call by Value 는 값 복사다 : Call by Value 는 값 복사다. void PlusFunction(int x); 의 x는 parameter(매개변수)로써 일종의 로컬변수라고 생각하면 된다. main()함수에서 int a를 PlusFunction()함수에 매개변수로서 넘겨준다는 것의 의미는, main()함수 안에 존재하는 a를 복사해서 PlusFunction() 함수 안에 넘겨주고, 이 복사된 a값을 x라는 매개변수를 통해 받아서, 함수 안에서 1을 증가시킨 다음 x를 출력하겠다는 것이다. 따라서 결과값은 PlusFunction(a)는 11이 되지만, a값은 복사해서 넘겨줬으니 main() 함수 안의 int a는 여전히 10이다. 2. Pass ..
C++ 삼항연산자 (조건연산자) : C++ 삼항연산자 는 if ~ else 문을 대신하여 사용할 수 있는 연산자이다. 조건연산자 또는 삼항연산자 라고 불린다. 1. 형태 ‘조건’ ? ‘A’ : ‘B’ : 조건이 참이면 A를 반환하고 조건이 거짓이면 B를 반환 2. 예시 1) 실무에서 많이 사용하는 형태 MAX_UINT16 은 65535로 define 되었으므로 그대로 출력된다. MAX(a,b) 를 a>b 가 참이라면 a를 반환, 거짓이라면 b를 반환하기로 define 한다. 따라서 MAX(10, 100) 은 10>100 이 거짓이므로 100을 반환해 주면 된다. 2) int nResult = 0; int A = 10, B = 20; nResult = (A < B) ? A : B; std::cout
STL이란? STL과 std 뭐가 다른가? C++ 프로그래밍 언어에서, C++ 표준 라이브러리(C++ Standard Library)는 C++ 표준 자체로 쓰여진 클래스들과 함수들의 집합니다. C++ 표준 라이브러리는 여러 제네틱 컨테이너들, 그리고 이러한 컨테이너들과 함수 객체, 제네릭 문자열, 스트림(파일 입출력과 인터렉티브를 포함하는), 몇몇 언어 특징 그리고 숫자의 제곱근을 찾는 것과 같은 작업을 위한 모든 함수들을 활용하기 위한 함수들을 제공한다. ".h" 로 끝나지 않는 헤더는 C++ 표준 라이브러리에는 존재하지 않는다. C++ 표준 라이브러리의 특징은 std 이름공간(namespace) 내에 선언된다는 것이다. C++표준 라이브러리는 표준 템플릿 라이브러리(STL : Standard Temp..
HeadlessCreator
머리없는개발자