Programming🧑💻/Cpp
-
상태기계와 코루틴 프레임Programming🧑💻/Cpp 2025. 2. 14. 22:40
코루틴이란?일반적인 함수의 경우 한번 호출되면 완료될때까지 실행되지만 코루틴은 실행 중간에 중단되었다가 나중에 중단됨 지점부터 다시 재개될 수 있는 함수입니다. 상태기계 (State Machine)상태기계는 코루틴이 어떻게 함수의 실행을 중단했다가 다시 재개할 수 있는지를 설명하는 핵심 매커니즘입니다. 컴파일러는 코루틴 함수를 상태기계로 변화하는 과정을 거칩니다. 예를 들어, 다음과 같은 코루틴이 있다고 가정했을 때, task example_coroutine() { std::cout 컴파일러는 이 코드를 내부적으로 다음과 같은 상태들을 가진 상태 기계로 변환합니다. // 컴파일러가 생성하는 내부적인 상태 기계의 의사 코드class ExampleCoroutineStateMachine { // ..
-
서브 루틴과 코루틴Programming🧑💻/Cpp 2025. 2. 13. 20:05
루틴이란?프로그래밍에서 루틴은 프로그램의 실행흐름을 의미합니다. 모든 프로그램은 하나 이상의 루틴으로 구성되어 있으며, 이러한 루틴들이 어떻게 상호작용하는지에 따라 프로그램의 동작이 결정됩니다. 서브 루틴 (subroutine)서브 루틴은 가장 일반적인 프로그램 실행 흐름의 형태입니다. 계층적 구조 : 서브루틴은 호출자-피호출자의 명확한 계층 관계를 가집니다. 메인 함수가 서브루틴을 호출하면, 서브 루틴은 메인함수에 종속됩니다. .단방향 제어 흐름 : 제어 흐름이 항상 호출자에서 피호출자로 전달되며, 작업이 완료되면 다시 호출자로 돌아옵니다. 동기적 실행 : 서브루틴이 실행되는 동안 호출자는 대기 상태가 되며, 서브 루틴이 완료될때까지 다음 작업을 수행할 수 없습니다. def sub(): print..
-
Macro가 뭘까?Programming🧑💻/Cpp 2025. 2. 12. 15:36
매크로는 전처리기에게 "이 텍스트를 저 텍스트로 바꿔주세요"라고 지시하는 일종의 치환 규칙입니다.메크로 기본 개념 가장 단순한 형태의 메크로는 #define을 사용한 상수 정의입니다. #define PI 3.14159#define MAX_STUDENTS 30int main() { double circle_area = PI * radius * radius; // 컴파일 전에 PI가 3.14159로 치환됨 int students[MAX_STUDENTS]; // MAX_STUDENTS는 30으로 치환됨} 여기서 중요한 것은 메크로가 동작하는 시점입니다. 컴파일러가 코드를 컴파일하기 전에, 전처리기가 먼저 모든 메크로를 치환합니다.위 코드는 전처리 후에 다음과 같이 변합니다. int main() ..
-
빌드 과정과 #include의 역할 이해하기Programming🧑💻/Cpp 2025. 2. 12. 14:52
빌드 과정 이해하기 cpp 프로그램이 실행 파일이 되기까지는 크게 세 단계를 거칩니다. 1. 전처리(Preprocessing) 단계전처리기는 실제 컴파일이 시작되기 전에 소스 코드를 다듬는 작업을 수행합니다. #으로 시작하는 모든 지시문(#include, #define 등)을 처리하는 것이 바로 이 단계입니다. 이때 #include 지시문을 만나면, 해당 파일의 내용을 그 자리에 그대로 복사해 넣습니다.2. 컴파일(Compilation) 단계전처리된 소스 코드를 기계어로 변환하는 단계입니다. 각각의 .cpp 파일은 독립적으로 컴파일되어 목적 파일(.obj 또는 .o)이 됩니다.3. 링크(Linking) 단계여러 개의 목적 파일들을 하나로 모아서 실행 파일을 만드는 단계입니다. 각 파일에서 사용된 함수나 ..
-
헤더파일은 뭐고 왜 필요한가?Programming🧑💻/Cpp 2025. 2. 12. 14:17
헤더 파일의 기본 개념 헤더 파일은 간단히 말해서 선언(Declaration)을 포함하는 파일입니다. 여기서 선언이란 "이런 것들이 어딘가에 있을 것이다."라고 컴파일러에게 알려주는 것을 의미합니다.예를 들어, 다음과 같은 함수 선언은 "이런 함수가 어딘가에 있을 것이다."라고 알려주는 것입니다. // math.h#ifndef MATH_H#define MATH_Hint calculateSum(int a, int b);#endif 반면, 구현(Implementation)은 실제로 그 함수가 어떻게 동작하는지를 정의하는 것입니다. // math.cpp#include "math.h"int calculateSum(int a, int b) { return a + b;} 위에서 정의한 헤더파일과 cpp 파일은..
-
L-value와 R-valueProgramming🧑💻/Cpp 2025. 2. 6. 21:43
표현식 ( Expression )표현식이란, 하나의 값으로 평가될 수 있는 코드의 단위입니다. 아래 코드에서 표현식은 계산되어 하나의 값이됩니다. int a = 5; // 5는 표현식int b = a + 3; // a + 3은 표현식int c = b * (a-1); // b * (a-1)은 표현식, (a-1)도 표현식 L-Value와 R-Value 개념L-value와 R-value는 표현식(expression)의 값 범주를 구분하는 방법입니다. L-Value의 'L'은 'Left'에서 왔습니다. 이는 할당 연산자(=)의 왼쪽에 올 수 있는 표현식을 의미합니다. L-Value의 핵심적인 특징은 메모리상에서 이름과 주소를 가지고 있어 여러번 참조 할 수 있다는 점입니다. int ..
-
함수 호출시 매개변수 전달 방법 3가지Programming🧑💻/Cpp 2025. 2. 5. 23:29
값에 의한 전달 ( Pass by Value ) 함수 호출시 매개 변수의 복사본이 호출된 함수의 스택 메모리에 생성됩니다. 원본 데이터와 완전히 독립된 메모리 공간을 사용합니다. 함수 종료시 복사본은 스택에서 자동으로 해제 됩니다. void processData(int data) { data = data + 1; // 값을 복사했기 때문에 원본 데이터에 영향 없음}int main() { int value = 5; processData(value); print("value=%d",value); // value 값은 여전히 5} 포인터에 의한 전달 ( Pass by Pointer )메모리 주소값만 복사되어 전달됩니다.포인터 자체는 호출된 스택 프레임내에 생성되지만 크기는 항상 고정됩..
-
콜 스택 동작을 통해 알아보는 함수 호출Programming🧑💻/Cpp 2025. 2. 4. 23:29
콜 스택이란?프로그램이 실행되어 메모리에 올라오면, 운영체제는 해당 프로그램을 프로세스라는 실행단위로 관리하면서 필요한 컴퓨팅 자원 (CPU 시간, 메모리 등) 을 할당합니다. 각 프로세스는 자신만의 독립된 메모리 공간을 할당받는데, 이를 프로세스의 메모리 구조라고 합니다. 프로세스는 뭘까?프로그램은 컴퓨터가 특정 작업을 수행하기 위해 작성된 명령어들의 집합입니다. 쉽게 말해 우리가 하드디스크에 저장해둔 실행 파일이라고 할 수 있죠. 예를 들어 워드나 크롬 브라우저 같은people-analysis.tistory.com 프로세스의 메모리는 크게 다음과 같은 영역으로 구분됩니다. 코드(텍스트) 영역: 실행할 프로그램의 코드가 저장되는 영역데이터 영역: 전역변수와 정적(static) 변수가 저장되는 영역힙(H..