컴퓨터 구조 13

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 // 모든 조건이 거짓일 경우 실행{ // 실행될 코..

가상 메모리

🤔 가상 메모리란?운영체제는 현재 가지고 있는 메모리를 가지고 프로그램들에게 뻥튀기해서 사용할 수 있는 가상 메모리를 제공한다. (물리적인 메모리보다 큰 메모리를 공간을 제공) 한정된 메모리에서 파악하기 힘든 속도로 빠르게 메모리를 빌려주고 돌려받는다.*멀티 프로세싱📒 참고자료https://namu.wiki/w/가상 메모리[CS/운영체제(OS)] 가상 메모리 (Virtual Memory)

컴퓨터 구조 2024.07.22

아스키코드와 유니코드

🤔 아스키코드(ASCII)란?ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호)아스키코드는 미국에서 정의한 표준화한 부호체계이며 영문 키보드로 입력할 수 있는 모든 기호들이 할당되어 있는 가장 기본적인 부호 체계이다.문자 당 1byte를 사용하는 특징이 있다.아스키코드는 8비트 중 7비트 사용 나머지 1비트는 에러 검출을 위한 용도로 사용함.*65번과 97번은 외우는 게 좋다.(65=’A’ 97=’a’)아스키코드는 SBCS와 MBCS의 특징을 가지고 있다.SBCS(Single Byte Character Set)아스키코드에 해당모든 문자를 1Byte로 처리MBCS(multi Byte Character Set)문자를 사용하는..

컴퓨터 구조 2024.07.20