본문 바로가기

전체 글141

프로세스에서 스택 메모리의 역할 운영체제는 프로세스를 메모리에 적재할 때, 코드 영역(code), 데이터 영역(data), 힙 영역(heap), 스택 영역(stack) 등으로 나누어 관리한다 이 중 스택 영역은 함수 호출 시 생성되는 스택 프레임(stack frame)을 저장하는 공간으로, 주로 지역 변수, 매개변수, 반환 주소 등의 데이터를 관리하는 데 사용된다스택 메모리 구조와 동작 방식스택은 후입선출(LIFO, Last-In First-Out) 구조로 동작하며, 각 함수 호출 시마다 새로운 스택 프레임이 생성되고, 함수가 종료되면 해당 프레임이 제거된다 이렇게 동작함으로써 프로세스는 함수 호출의 흐름을 추적하고, 호출된 함수의 상태를 보존할 수 있다 스택 메모리의 존재 의의스택은 단순한 저장 공간이 아니라, 함수 호출의 흐름을 자.. 2025. 4. 9.
C 빌드 과정 C에서 빌드는 소스 코드(.c 파일)를 실행 가능한 프로그램으로 변환하는 과정이다빌드는 4단계(전처리, 컴파일, 어셈블, 링킹)로 진행되며 최종적으로 실행 가능한 바이너리 파일(.exe, .out)등이 생성된다1. 전처리(Preprocessing)전처리 지시문을 처리하는 단계이다이 단계에서 코드의 매크로 대체, 헤더 파일 포함, 조건부 컴파일 등이 수행된다 예시로 다음과 같은 코드가 있다#include /* 표준 라이브러리 포함 */#define PI 3.14 /* 매크로 정의 */int main() { printf("PI = %f\n", PI); return 0;} 이 코드가 전처리 과정을 마치면 다음과 같은 코드로 변환된다/* 전처리 후 코드 *//* stdio.h의 전체 내용이 이.. 2025. 4. 9.
C 언어 배열 배열이란?배열(array)은 동일한 타입의 데이터를 순차적으로 저장하는 자료 구조다C 언어에서는 배열을 통해 여러 개의 값을 하나의 이름으로 관리할 수 있으며, 각 요소는 인덱스를 통해 접근할 수 있다예를 들어 `int numbers[5];`라고 하면, 정수형 데이터를 5개 저장할 수 있는 메모리 공간이 확보되며, `numbers[0]`부터 `numbers[4]`까지 인덱스로 접근할 수 있다 C에서 배열은 다음과 같이 선언한다 [크기];int scores[3]; // 정수형 배열 3개float prices[10]; // 실수형 배열 10개char name[20]; // 문자형 배열 20개 (문자열 저장 가능) 기본적으로 배열의 크기는 정수 상수로만 지정할 수 있으며, 컴파일 타.. 2025. 4. 9.
C 언어 함수 함수의 선언 방식, 반환형, 전방 선언C에서 함수의 기본적인 특징C 언어에서 함수는 기본적으로 전역 함수이다. 또한, 오버로딩을 지원하지 않는다 C는 절차적 언어다. 항상 위에서 아래로 코드가 실행되기 때문에 함수가 선언되기 전 호출되면 문제가 발생할 여지가 잇다컴파일러가 처음 등장한 함수 호출을 기본적으로 int 반환형으로 가정하기 때문이다 따라서, 나중에 반환형이 int가 아닌 것으로 확인되면 컴파일 오류가 발생한다#include int main(void) { /* sayHello()가 정의되기 전에 호출됨 */ say_hello(); return 0;}void say_hello(void) { printf("Hello, World!\n");} 만약 잘못된 반환형을 사용하려 하.. 2025. 4. 8.
C 언어에서 전역/지역 변수를 어떻게 활용할 것인가? C 언어에는 접근 한정자가 없기 때문에 변수의 가시성을 잘 관리해야 한다특히, 전역 변수를 남발해서 사용하면 스파게티 코드가 될 여지가 있어 적절한 설계가 필요하다 C에서 전역 변수를 남용하면 발생하는 문제는 다음과 같다모든 함수에서 접근 가능 → 코드 의존성이 높아지고 디버깅이 어려워짐동시 수정 가능성 증가 → 여러 함수가 동일한 전역 변수를 수정하면 예측하기 어려운 버그 발생 가능캡슐화가 어렵다 → 객체지향 언어처럼 데이터 보호가 불가능따라서 이러한 문제들을 해결하기 위하여, 정적 변수 등을 활용하는 방법을 사용한다========= config.h =========#ifndef CONFIG_H#define CONFIG_H/* 전역 변수처럼 보이지만, 파일 내부에서만 사용 가능 */static int .. 2025. 4. 8.
C 언어의 bool 형 C89 표준에서는 bool 자료형이 존재하지 않았으며, 대신 정수 int 를 사용하여 0이면 false, 0이 아닌 값을 true로 취급하였다C99 이후 stdbool.h 가 추가되어 bool 키워드를 사용할 수 있게 되었다 그래서 C에서는 전처리기를 사용하여 0을 FALSE, 1을 TRUE로 매핑하여 사용하는 방식을 주로 사용한다고 한다#include /* 전처리기를 사용하여 FALSE와 TRUE 정의 */#define FALSE 0#define TRUE 1int main(void) { int isTrue = TRUE; int isFalse = FALSE; printf("isTrue: %d\n", isTrue); /* 출력: 1 */ printf("isFalse: %d\n", .. 2025. 4. 8.
반응형