분류 전체보기
-
이중 포인터Programming🧑💻/Cpp 2025. 2. 1. 12:24
포인터는 일반적으로 다른 변수의 메모리 주소값을 저장하는 데 사용됩니다. 하지만 때로는 포인터 자체의 메모리 주소를 저장해야 할 필요가 있습니다. 이럴 때 포인터의 포인터(이중 포인터)를 사용합니다.int x = 10; // 변수 x (값: 10)int* p = &x; // 포인터 p는 x의 메모리 주소를 저장int** q = &p; // 이중 포인터 q는 포인터 p의 메모리 주소를 저장int*** r = &r;만약 변수 x가 메모리 주소 220번지에 있고, 포인터 p가 209번지에 있다면:p는 x의 주소인 220을 저장q는 p의 주소인 209를 저장r은 q의 주소인 199를 저장 이렇게 포인터의 포인터를 사용하면 포인터 자체의 메모리 주소를 참조하고 관리할 수..
-
포인터도 타입이 필요한 이유Programming🧑💻/Cpp 2025. 1. 31. 12:33
포인터 연산포인터 연산에서 중요한 점은 포인터의 타입에 따라 실제 증감되는 메모리 주소의 크기가 달라진다는 것입니다.char* ptr1 = (char*)1000; // char는 1바이트int* ptr2 = (int*)1000; // int는 4바이트double* ptr3 = (double*)1000; // double은 8바이트ptr1++; // 주소값: 1001ptr2++; // 주소값: 1004ptr3++; // 주소값: 1008char 포인터는 1바이트씩 증가int 포인터는 4바이트씩 증가double 포인터는 8바이트씩 증가즉, ptr++ 연산을 수행할 때 실제로는 다음과 같은 계산이 이루어집니다.새로운주소 = 현재주소 + (sizeof(포인터타입) * 1)포인터 타입을 제한하는 이..
-
변수와 포인터Programming🧑💻/Cpp 2025. 1. 30. 23:48
변수 선언변수를 선언하면 해당 변수의 값을 저장하기 위한 메모리를 할당한다.이때 얼만큼의 메모리를 할당할지는 변수의 타입에 따라 결정된다.예를 들어 일반적으로 int 타입의 경우에는 4byte를 char 타입의 경우 1byte를 할당한다.2025.01.30 - [Programming🧑💻/Cpp] - 변수와 포인터시스템 내부적으로 룩업 테이블이라는 것을 가지고 있으며 해당 테이블에는 변수명, 변수 타입, 메모리 시작 주소를 가지고 있다.변수를 선언한 다음에 `a = 5` 명령어가 실행되면 내부적으로는 룩업 테이블에서 변수명 a에 대응하는 메모리 시작 주소를 찾아가서 5라는 값을 저장한다.포인터란?다른 변수의 주소를 값으로 저장하는 변수변수를 선언하는 이유는 숫자나 문자와 같은 특정한 '값'을 저장하기..
-
타입은 왜 중요할까?Programming🧑💻 2025. 1. 29. 23:48
프로그래밍 언어는 변수 선언시 타입 명시 유무에 따라 크게 두 가지로 나눌 수 있습니다. JavaScript나 Python같은 스크립트 언어들은 변수 선언 시 타입을 명시하지 않아도 되며, 런타임에 타입이 결정되는 동적 타입 시스템을 사용합니다. 반면 C나 Rust와 같은 언어들은 변수 선언 시 타입을 명시적으로 지정해야 하며, 컴파일 타임 이전에 타입이 결정되는 정적 타입 시스템을 채택하고 있습니다. 그렇다면 왜 C나 Rust와 같은 언어들은 변수 선언 시 타입을 명시해야 할까요? 이는 타입 지정을 통해 개발자가 데이터를 표현하는 데 필요한 메모리를 직접 제어할 수 있도록 하기 위함입니다. 컴퓨터는 모든 데이터를 0과 1의 나열로 표현합니다. 각 자리에는 0 또는 1만이 올 수 있으며, 이러한 값들의 ..
-
부동 소수점이란?Apple🍎/Metal 2025. 1. 28. 16:24
컴퓨터가 실수를 표현하는 방식 10진법 우리가 일상적으로 수를 사용할 때는 10진수 체계를 사용합니다. 0부터 9까지 총 10개의 숫자를 사용하며 각 자릿수는 10의 제곱의 형태로 표현합니다. 예를 들어 "2025"라는 숫자는 다음과 같이 이해할 수 있습니다. 2 × 10^3 = 20000 × 10^2 = 02 × 10^1 = 205 × 10^0 = 52000 + 0 + 20 + 5 = 20252진법위와 달리 2진법은 0과 1 단 두개의 숫자를 사용하며 각 자릿수는 2의 제곱의 형태로 표현합니다. 예를 들어 "1101"라는 숫자는 다음과 같이 계산됩니다. 1 × 2^3 = 81 × 2^2 = 40 × 2^1 = 0 1 × 2^0 = 18 + 4 + 0 + 1 = 132진법으로 실수를 표현하는 방법정수..
-
쓰레드는 뭘까?Apple🍎/Cocurrency 2025. 1. 27. 21:36
프로세스의 도입으로 하나의 CPU 코어를 여러 프로그램이 시분할(time-sharing) 방식으로 공유할 수 있게 되었습니다. 운영체제는 각 프로세스에 CPU 시간을 조금씩 할당하여 마치 여러 프로그램이 동시에 실행되는 것처럼 보이게 합니다. 메모장, 웹브라우저, 유튜브를 동시에 실행하는 상황을 예로 들어보겠습니다. 메모장에서 파일 저장과 같은 I/O 작업이 발생하면, 해당 프로세스는 I/O 작업이 완료되기를 기다리는 'blocked' 상태로 전환됩니다. 이때 운영체제는 CPU 자원을 웹브라우저나 유튜브와 같은 다른 실행 가능한('ready') 상태의 프로세스들에게만 할당합니다. 그렇지만 메모장 프로그램이 파일을 디스크에 저장하는 동안에도 사용자는 계속해서 텍스트를 입력하거나, 맞춤법 검사 결과를 확인하..
-
프로세스는 뭘까?Apple🍎/Cocurrency 2025. 1. 27. 00:15
프로그램은 컴퓨터가 특정 작업을 수행하기 위해 작성된 명령어들의 집합입니다. 쉽게 말해 우리가 하드디스크에 저장해둔 실행 파일이라고 할 수 있죠. 예를 들어 워드나 크롬 브라우저 같은 응용프로그램 파일들이 이에 해당합니다. 프로그램은 실행되기 전까지는 그저 디스크에 저장된 정적인 상태로 존재합니다. 반면 프로세스는 실행 중인 프로그램을 의미합니다. 프로그램이 실행되면 운영체제는 해당 프로그램을 메모리에 로드하고, CPU 시간과 같은 시스템 자원을 할당합니다. 이렇게 실행되어 메모리에서 동작하는 상태가 바로 프로세스입니다. 초기 컴퓨터 시스템에서는 한번에 하나의 프로그램만 실행할 수 있었습니다. 프로그램은 CPU, 메모리와 같은 컴퓨터의 모든 자원을 독점적으로 사용했기 때문에 자원 관리는 비교적 단순했습..
-
동시성 이해를 위한 컴퓨터 기본 구조Apple🍎/Cocurrency 2025. 1. 26. 20:01
컴퓨터란 데이터들을 정해진 규칙에 따라 연산을 수행하는 장치 입니다. 요리에 한번 비유를 해볼까요? 데이터: 요리의 재료들이 데이터에 해당합니다. 예를 들어 계란, 설탕, 밀가루와 같은 실제 재료들은 컴퓨터가 처리하는 원시 데이터와 같습니다.재료들은 그 자체로는 아무 의미가 없지만, 정해진 규칙에 따라 처리되면 의미 있는 결과물이 됩니다. 정해진 규칙: 레시피가 바로 정해진 규칙에 해당합니다. 레시피는 "계란을 3개 넣고, 설탕 2스푼을 넣은 뒤 섞는다"와 같이 재료를 어떤 순서로, 어떻게 처리해야 하는지 정확히 명시합니다. 이는 컴퓨터 프로그램이 데이터를 어떻게 처리할지 정의하는 것과 같습니다. 연산: 실제 요리 과정이 연산에 해당합니다.재료를 섞고, 반죽하고, 굽는 등의 물리적 행위들은 컴퓨터가 수행..