컴퓨터 구조/C, C++ 7

C/C++ 동적 할당

🤔 정적 할당과 동적 할당의 차이정적 할당(Static Allocation) 동적 할당(Dynamic Allocation)컴파일 타임에 메모리 할당런타임에 필요한 만큼 메모리 할당미리 할당 받기 때문에 동적 할당보다 빠름실핼 중 논리적으로 옳고 그름을 따져 할당 받기 때문에 느림프로그램 종료 시 자동으로 메모리 반환사용자가 직접 메모리 반환 해주어야 함🤔 Heap 메모리 사용 조건무조건 포인터를 사용해야 한다.결국은 heap의 주소를 저장하는 것이기 때문Heap 메모리에 할당을 했다면 해제(반환)도 꼭 해주어야 한다. 필연적.메모리 누수(memory leak)를 방지하기 위함. + 댕글리 포인터 방지.현재는 운영체제가 해제되지 않은 메모리를 회수하지만 이는 운영체제가 문제를 복구하기 위한 작업이므로,..

다중 포인터란

🤔 다중 포인터 사용 이유다중 포인터(multiple pointers)를 사용하는 이유는 다양한 상황에서 메모리 주소를 효율적으로 관리하고 조작하기 위해서이다. 다중 포인터는 '포인터의 포인터'를 뜻 한다.↖️ 다중 포인터 사용 예다른 메모리 영역(함수)에서 동적 메모리로 초기화시켜주고 싶을 때 사용다차원 배열의 할당된 메모리를 해제(반환) 시켜주고 싶을 때 사용TMI배열의 이름을 담을 수 있는 독립적인 메모리가 존재한다.🍡 간접 참조를 통한 동적 메모리 할당 및 값 수정void Change_Refrence(int** ppNum);int main(){ int iNum(100); int* pNum = &iNum; cout 🍡 C에서 문자열 배열 처리char* strings[] = { "He..

구조체 크기 계산법 및 최적화

🤔 구조체의 크기 결정 이유구조체의 크기는 기본 자료형 멤버 변수 중 가장 큰 자료형을 기준으로 한다.사용자 정의 자료형의 크기는 기준으로 삼지 않는다.char[12]와 int가 있을 때 int형의 4byte를 기준으로 한다.이유는 기본 자료형을 기준으로 하기 때문. 배열의 크기를 따로 기준으로 삼지 않는다.변수들의 초기화 위치도 굉장히 중요하다.작은 메모리의 자료형부터 선언해 줘야 메모리 절약을 할 수 있다.int 형(4byte)로 기준을 삼게 되면 4byte씩 담게 되고, 초과하면 새로운 4byte로 담는다. ex. 같은 자료형이 있는 구조체라도 선언 위치에 따라 크기 변화 예시😊 좋은 예시struct tagInfo { char cName; // 1 short sNmae; // 2 -> 4b..

const와 포인터

🤔 Const 포인터?const 키워드를 활용해 포인터의 특성을 바꿔줄 수 있다.const 주의점const 키워드가 들어가는 이상 선언과 동시에 초기화는 필수이다.📖 읽기 전용 포인터값을 쓰진 못하고 읽을 수만 있다. ex. const int* p = &iNum;int iNum(0);cont int* p = &iNum; // 읽기 전용 포인터++p; // 참조하는 주소를 변경할 수 있다.*p = 100; // *주소에 저장된 값은 변경할 수 없다.cout  📍 상수 포인터처음 초기화 해준 주소만 대입이 가능하다. 이후 대입은 불가능 ex. int* const p = &iNum;int iNum(0);int* const p = &iNum;++p; // *참조하는 주소를 변경할 수 없다.(*p)++; /..

[C/C++]포인터 기초

👉 포인터왜 포인터를 사용해야 하는가?메모리 영역이 다른(중괄호) 변수의 값을 변경하고 싶다.어떻게?가상 메모리에 저장된 변수 주소만 알 수 있다면 다른 메모리 영역에서도 값을 변경할 수 있다.절대 주소란RAM 메모리의 절대 주소(실제 물리적 메모리). 바뀌지 않는.가상 메모리 주소란복사해 준 메모리 주소 ex. (0x0000000) 의 0x대표 주소란복사해준 메모리 첫 번째 주소.ex. 함수에 2가 저장된 int형 변수 메모리 저장 형태RAM    가상 메모리     stack메모리(후입선출) [ ]              [ ]                  0x4[00000000][ ]              [ ]                  0x3[00000000][ ]        >   ..

[C/C++] 함수란

반환 타입 / 함수 이름 / 파라미터 or 인자 or 매개 변수 void Render (*void);TMI : C언어 시절엔 파라미터값이 없을 때 void를 꼭 넣어줘야 했음. 지금은 안 해도 됨.void Render(int _iNum); -> **함수 선언**int main(){ return 0;}void Render(int _iNum) -> **함수 정의**{ std::cout main 함수를 기준으로 위쪽으로는 선언(변수 만들듯 세미 콜론으로 종결), 아래쪽으로는 구현컴퓨터 입장에서 함수의 이름은 함수의 메모리 공간의 첫 번째 주소로 인식한다.() = 함수 호출 연산자💈 함수 형태 4가지파라미터 : void 반환 : void파라미터 : 자료형 반환 : void파라미터 : void 반환 : 자료형(..

[C/C++] 분기문

🤔 분기문이란?원하는 조건에 따라 코드를 실행할지 하지 않을지 정할 수 있는 문법이다.📚 분기분 3가지 종류와 특징go to : 여러 문제가 발생할 수 있어 암묵적으로 사용하지 말아야 하는 문법이다.이유는 스파게티 코드가 되기 때문인데, 레이블(라벨)이 붙어진 곳까지 바로 넘어가는 기능이 여러 번 사용된다면 유지보수가 힘들어지기 때문이다.goto skip; // 라벨이름을 skip으로 설정std::cout if : 분기문도 맞지만 조건문으로 많이 불림.조건이 참일 경우 실행되는 문법중괄호 안에서 변수를 선언 시 메모리의 영역이 달라진다.if (조건식){ // 실행될 코드}else if (조건식 유형에 맞는 다른 조건식){ // 실행될 코드}else // 모든 조건이 거짓일 경우 실행{ // 실행될 코..