게임 개발
-
포인터 vs 참조 -성능: 똑같음 편의성: 참조 승! 1. 편의성 관련 편의성이 좋다는게 꼭 장점만은 아니다 포인터는 주소를 넘기니 확실하게 원본을 넘긴다는 힌트를 줄 수 있는데, 참조는 자연스럽게 모르고 지나칠 수도 있음 StatInfo info; // 포인터 PrintInfo(&info); // 참조 PrintInfo(info); 만약 신입이 와서 info.hp = 10000; 이런식으로 조져버릴수도 있다. -> const 사용해서 방지 const 사용 별(*)기준, 앞에다 붙이는것과 뒤에 붙이는게 다름 별 뒤에 붙인다면? StatInfo* const info info = &globalInfo; 가 막힘 info라는 바구니의 내용물[주소]을 바꾸지 못하게 info 주소값을 갖는 바구니 -> 주소값이 ..
[언리얼 MMORPG pt1] 포인터 vs 참조포인터 vs 참조 -성능: 똑같음 편의성: 참조 승! 1. 편의성 관련 편의성이 좋다는게 꼭 장점만은 아니다 포인터는 주소를 넘기니 확실하게 원본을 넘긴다는 힌트를 줄 수 있는데, 참조는 자연스럽게 모르고 지나칠 수도 있음 StatInfo info; // 포인터 PrintInfo(&info); // 참조 PrintInfo(info); 만약 신입이 와서 info.hp = 10000; 이런식으로 조져버릴수도 있다. -> const 사용해서 방지 const 사용 별(*)기준, 앞에다 붙이는것과 뒤에 붙이는게 다름 별 뒤에 붙인다면? StatInfo* const info info = &globalInfo; 가 막힘 info라는 바구니의 내용물[주소]을 바꾸지 못하게 info 주소값을 갖는 바구니 -> 주소값이 ..
2023.10.25 -
포인터 기초 #include using namespace std; // 오늘의 주제: 포인터 void SetHP(int* hp) { *hp = 100; } int main() { int number = 1; int hp = 1; SetHP(&hp); // 포인터로 주소를 넘겨줘야 값을 변경가능 // TYPE* 변수명; // 일단 2가지 요소 // - TYPE // - * // 바구니는 바구니인데... // [주소를 저장하는 바구니다!] // 참고) 포인터라는 바구니는 4바이트(32비트) 또는 8바이트(64비트) 크기 고정이다. int* ptr = &number; // 근데 남의 주소를 갖고 뭘 하라는거지? // 추가 문법: [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라! // *변수이..
[언리얼 MMORPG pt1] 포인터포인터 기초 #include using namespace std; // 오늘의 주제: 포인터 void SetHP(int* hp) { *hp = 100; } int main() { int number = 1; int hp = 1; SetHP(&hp); // 포인터로 주소를 넘겨줘야 값을 변경가능 // TYPE* 변수명; // 일단 2가지 요소 // - TYPE // - * // 바구니는 바구니인데... // [주소를 저장하는 바구니다!] // 참고) 포인터라는 바구니는 4바이트(32비트) 또는 8바이트(64비트) 크기 고정이다. int* ptr = &number; // 근데 남의 주소를 갖고 뭘 하라는거지? // 추가 문법: [주소를 저장하는 바구니]가 가리키는 주소로 가서 무엇인가를 해라! // *변수이..
2023.10.24 -
1. 함수 기초 생략 2. 스택 프레임 스택은 높은 메모리주소에서 -> 낮은 메모리 주소로 진행 프로그램이 실행될 때 스택 메모리 크기를 지정함 만약 함수를 무한정 호출하면 스택오버플로우 발생 가능 (재귀함수 등) 3. 지역 변수와 값 전달 전역변수: DATA 영역에 할당. (초기화 여부, const 여부 등에 따라 .data, .bss, .rodata 등에 할당) - 전역변수는 디버깅하기 어렵기 때문에 웬만하면 사용 지양. 지역변수: STACK 영역에 할당. 4. 호출 스택 (call stack) #include using namespace std; // 오늘의 주제: 호출 스택 // 디버거에서 call stack 확인 가능 // 함수 선언 // 나중에 함수 선언부만 별도의 파일로 관리하게 될 것임. ..
[언리얼 MMORPG pt1] 함수1. 함수 기초 생략 2. 스택 프레임 스택은 높은 메모리주소에서 -> 낮은 메모리 주소로 진행 프로그램이 실행될 때 스택 메모리 크기를 지정함 만약 함수를 무한정 호출하면 스택오버플로우 발생 가능 (재귀함수 등) 3. 지역 변수와 값 전달 전역변수: DATA 영역에 할당. (초기화 여부, const 여부 등에 따라 .data, .bss, .rodata 등에 할당) - 전역변수는 디버깅하기 어렵기 때문에 웬만하면 사용 지양. 지역변수: STACK 영역에 할당. 4. 호출 스택 (call stack) #include using namespace std; // 오늘의 주제: 호출 스택 // 디버거에서 call stack 확인 가능 // 함수 선언 // 나중에 함수 선언부만 별도의 파일로 관리하게 될 것임. ..
2023.10.23 -
1. 분기문 스킵 2. 반복문 while, do while, for, break, continue 3. 열거형 #include using namespace std; // 상수인건 알겠는데, 너무 따로 노는 느낌? // 하나의 셋트인데? // 경우에 따라서 어셈블리 코드를 까 보면 메모리에 변수로 올라가는 경우도 있음 // 보통은 상수로 최적화 되긴 함 const int SICCERS = 1; const int ROCK = 2; const int PAPER = 3; // 숫자를 지정 안하면 첫 값음 0부터 시작 // 그 다음 값들은 이전 값 + 1 // const 보다 열거형이 더 선호됨. 메모리에 올라가지 않기 때문. (메모리상으로 더 이점이 있음) // 모던 c++ 에서는 enum class 를 사용함..
[언리얼 MMORPG pt1] 코드의 흐름 제어1. 분기문 스킵 2. 반복문 while, do while, for, break, continue 3. 열거형 #include using namespace std; // 상수인건 알겠는데, 너무 따로 노는 느낌? // 하나의 셋트인데? // 경우에 따라서 어셈블리 코드를 까 보면 메모리에 변수로 올라가는 경우도 있음 // 보통은 상수로 최적화 되긴 함 const int SICCERS = 1; const int ROCK = 2; const int PAPER = 3; // 숫자를 지정 안하면 첫 값음 0부터 시작 // 그 다음 값들은 이전 값 + 1 // const 보다 열거형이 더 선호됨. 메모리에 올라가지 않기 때문. (메모리상으로 더 이점이 있음) // 모던 c++ 에서는 enum class 를 사용함..
2023.10.23 -
1. 환경설정 비주얼 스튜디오 사용 2. 정수 #include int hp = 100; // 초기값이 0이거나, 초기값이 없는 변수라면 .bss 섹션에 저장됨 // signed 는 생략가능 char a; // 1바이트 (-128 ~ 127) short b; // 2바이트 (-32768 ~ 32767) int c; // 4바이트 (-2147483648 ~ 2147483647) __int64 d; // 8바이트 long long d; (−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) unsigned char ua; // 1바이트 (0 ~ 255) unsigned short ub; // 2바이트 (0 ~ 65535) unsigned int uc; // 4바이..
[언리얼 MMORPG pt1] 데이터 갖고 놀기1. 환경설정 비주얼 스튜디오 사용 2. 정수 #include int hp = 100; // 초기값이 0이거나, 초기값이 없는 변수라면 .bss 섹션에 저장됨 // signed 는 생략가능 char a; // 1바이트 (-128 ~ 127) short b; // 2바이트 (-32768 ~ 32767) int c; // 4바이트 (-2147483648 ~ 2147483647) __int64 d; // 8바이트 long long d; (−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) unsigned char ua; // 1바이트 (0 ~ 255) unsigned short ub; // 2바이트 (0 ~ 65535) unsigned int uc; // 4바이..
2023.10.22 -
1. 환경설정 및 Hello World 1. SASM 설치 2. 환경설정에서 build -> x64, nasm 으로 설정 3. 새 프로젝트 만들기 4. 다음과 같이 입력하면 Hello World 를 출력할 수 있다. %include "io64.inc" section .text global CMAIN: CMAIN: ;write your code here PRINT_STRING msg xor rax, rax ret section .data msg db 'Hello World', 0x00 5. save .exe 하면 실행 파일로 저장도 가능하다. 2. 데이터 기초 2.1 컴퓨터는 정수를 어떻게 저장하는가? 비트와 바이트 1바이트 == 8비트 비트로 숫자를 표현할때, 최상위 비트는 부호를 의미하고, 음수를 나타..
[언리얼 MMORPG pt1] 어셈블리 언어 입문1. 환경설정 및 Hello World 1. SASM 설치 2. 환경설정에서 build -> x64, nasm 으로 설정 3. 새 프로젝트 만들기 4. 다음과 같이 입력하면 Hello World 를 출력할 수 있다. %include "io64.inc" section .text global CMAIN: CMAIN: ;write your code here PRINT_STRING msg xor rax, rax ret section .data msg db 'Hello World', 0x00 5. save .exe 하면 실행 파일로 저장도 가능하다. 2. 데이터 기초 2.1 컴퓨터는 정수를 어떻게 저장하는가? 비트와 바이트 1바이트 == 8비트 비트로 숫자를 표현할때, 최상위 비트는 부호를 의미하고, 음수를 나타..
2023.10.19