C++ 20

열혈 C++ 프로그래밍 OOP 프로젝트 02

OOP 프로젝트 02에서는 class를 추가해 private, public, 정보은닉과 캡슐화에 대해 추가함 1. 구조체 -> class로 변경, 생성자 추가, 멤버 이니셜라이저 추가 2. 객체 배열에서 객체 포인터 배열로 변경 #include #include using namespace std; enum { MAKE = 1, DEPOSIT, WITHDRAW, INQUIRE, EXIT }; class Account { private: int accId; int balance; char* cusName; public: Account(int id, int money, char* name) :accId(id), balance(money) { cusName = new char[strlen(name) + 1]; ..

C++ 2024.03.20

스택 프레임

스택 프레임(stack frame) 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다. 함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장됩니다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다. 이러한 스택 프레임 덕분에 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있습니다.

C++ 2023.07.06

C++ 열거형

상수로 표현했지만, 양이 많아질경우 따로 노는 느낌 const의 경우 초기값이 필수로 들어가야함 메모리에 올라가지않을수있음 함수쪽에서 사용될때 지정된 값들로 변경되서 사용되기때문에 주소값없이 메모리에 올라가지않을수있음 주소를 참고하는 경우에는 메모리에 올라감 // 메모리가 사용됨 const int test1 = x; const int test2 = y; const int test3 = z; 하나의 세트로 관리하고싶을경우 열거형 사용 enum enum은 초기값을 지정하지않으면 첫 값은 0부터 시작 ex) ENUM_X = 0; 그 다음 값들은 이전 값 + 1 ENUM의 경우 메모리에 올라가는것없이 완벽하게 값들로 대체되서 사용됨 enum ENUM_XX ex) Player Type등.. 이름 지정 { ENUM..

C++ 2023.07.03

C++ 유의사항 1)

1) 변수의 유효범위 전역 변수는 유효범위가 따로 존재하지않음 특정 함수 내부에서 변수를 지정했을경우(스택) { } 중괄호의 범위가 생존 범위 - 같은 이름 두번 사용할 때 문제 2) 연산 우선순위 괄호를 이용해서 가시성을 높여줄수 있음 3) 타입 변환 캐스팅할 경우 타입에 따라서 값이 변경될수있음 각자 허용되는 byte단위 확인필요 ex) int x = 77777 > short로 캐스팅시 12241로 변환됨 위쪽에있던 비트 데이터가 짤린 상태로 저장 int > float 실수로 변환할 때 정밀도 차이가 있기 때문에 데이터 손실이 일어날수 있음 int > unsigned int 비트 단위로 보면 똑같은데, 분석하는 방법이 달라져 값이 변경될수 있음 4) 사칙 연산 관련 데이터형에 따른 오버플로우 조심해야..

C++ 2023.06.21

SASM 어셈블리언어 (2)

메모리와 레지스터의 값 주소 확인 메모리 레지스터 값의 연관성?을 확인하는 과정 section .data - 초기화 된 데이터 - [변수이름] [크기] [초기값] - [크기] db(1byte) dw(2byte) dd(4byte) dq(8byte) section .bss - 초기화 되지 않는 데이터 - [변수이름] [크기] [개수] - [크기] resb(1) resw(2) resd(4) resq(8) - data와 bss의 차이는 초기화 되는지 여부인데 bss를 사용하면 용량을 줄일 수 있음.. 레지스트 -> 메모리 .data에 변수를 선언하고 해당 데이터를 레지스터에 옮기며 해본 결과 mov rax, a(.data에서 선언한 값)를 쓰면 변수 a의 주소값을 rax에 복사하는것에 불과함 SASM에서..

C++ 2023.04.14

레지스터 이해하기 (1)

연산은 CPU내 레지스터에서 진행.. register는 가장 빠른 저장 공간 rax 64bit eax 32bit 64bit에서는 범용 레지스터로 rax, rbx, rcx, rdx 가 존재 sasm에서 mov eax, 0x1234 를 실행할경우 실행중에 레지스터 rax에 0x1234값이 저장됨 rax(64bit)안에 eax(32bit)에 저장한거로 이해함.. mov rbx, 0x12345 는 rbx에 0x12345 저장됨 mov cl, 0xff 경우 rcx안에 해당값이 저장됨 -------------------------------------------------------------------- mov eax, 0x1234 mov al, 0x00 실행 시 rax에 0x1234가 저장되면 이후에 mov a..

C++ 2023.04.14

SASM 어셈블리언어 (1)

1. SASM 다운로드 2. 다운로드 후 세팅에서 x64로 변경 (64bit) 3. hello world 출력해보기 64bit 설정후에 hello world 찍어보려니 에러가 자꾸 나서 검색해보니 맨위에 %include "io64.inc"가 없으면 PRINT_STRING등 SASM에서 지원하는 함수들이 사용되지 않는듯함.. 해당 코드 추가하고 실행하니 hello world 출력 완료 section .text 는 코드쓰는곳.. section .data는 변수선언하는곳.. 어셈블러라는게 결국 컴퓨터 언어로 번역해주는거라고 생각하면 되는것같음 인프런 강의 [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] 참고

C++ 2023.04.12