분류 전체보기
-
포인터의 크기는 어떻게 결정될까?Programming🧑💻/Cpp 2025. 2. 3. 23:48
변수는 변수를 선언할때 지정한 타입에 따라 값을 저장하기 위해 사용할 수 있는 메모리의 양이 결정됩니다. 예를 들어 일반적인 경우 char 의 경우에는 1byte , int의 경우에는 4byte가 해당 변수를 위한 메모리 공간으로 할당됩니다. 그렇다면 포인터 자체의 크기는 어떻게 될까요? 이 질문에 답하기 위해 간단한 C++ 코드를 작성하여 실행하면 32 비트 시스템에서는 모든 포인터가 4바이트, 64 비트 시스템에서는 모든 포인터가 8바이트로 출력됩니다. 비트 시스템은 뭐고 왜 이런 결과가 나오게 되는 걸까요?#include using namespace std;int main() { // 다양한 타입의 포인터 선언 int* intPtr; char* charPtr; double* d..
-
지금 내가 무엇을 하고 있나?Bull-shit🐶 2025. 2. 2. 23:26
아이디어를 가지고 무언가를 만들기로 결심했을 당시에는 나만의 차별화 포인트에서 시작한다. 근데 이 아이디어를 실체화시키기 위한 과정을 겪다 보면 너무 많은 부분들이 비어있다는 것을 알게 된다. 그리고 이 공간들을 메꾸기 위해 여기저기 기웃거리며 가져와 붙이다 보면 다른 것들과 별반 다름없는데 더 요상한 게 나와버린다.아이디어를 검증할 수 있는 형태까지만 만들어 얼른 내놓고 피드백을 받는 게 더 좋다는 것을 계속 되뇌여도, 만드는 내내 눈에 거슬리는 것들을 일단은 나둔다는 게 쉽지 않다.상한선을 추종하기보다 하한을 넘기는 것을 지속하는 과정이 더 필요한데 말이다.엔지니어라는 단어를 들으면 기술적 역량에 더 집중하게 되는 것 같다. 당장 그럴듯하게 결과를 낼 수 있어도 성능을 따져가며 미래에 생길 수도 있는..
-
이중 포인터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') 상태의 프로세스들에게만 할당합니다. 그렇지만 메모장 프로그램이 파일을 디스크에 저장하는 동안에도 사용자는 계속해서 텍스트를 입력하거나, 맞춤법 검사 결과를 확인하..