Understanding_and_Using_C_Pointers
7 posts
C
C++
Understanding_and_Using_C_Pointers
January 11, 2024
동적 메모리 관리

동적 메모리 관리 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 동적 메모리 관리 C 프로그램은 런타임 시스템 안에서 실행된다. 런타임 시스템은 일반적으로 운영체제에서 제공되는 환경이며, 많은 프로그램 기능들과 함께 스택(stack)과 힙(heap)을 지원한다. C99 표준에서 가변 길이 배열(Variable Length Array)이 도입되었다. 이 배열의 크기는 컴파일 될 때가 아니라 실행될 때 결정된다. 하지만 일단 가변 길이 배열이 생성되고 나면, 여전히 크기를 변경할 수 없다. 동적 메모리 할당은 할당, 해제 함수를 사용하여 수동으로 처리된다. 이 과정을 동적 메모리 관…

C
C++
Understanding_and_Using_C_Pointers
January 11, 2024
일반적인 포인터 사용

일반적인 포인터 사용 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 일반적인 포인터 사용 포인터는 매우 다양한 방법으로 사용된다. 이번 포스팅에서는 다음을 포함한 포인터의 다양한 사용법에 대해서 다룬다. 다중 수준 간접지정 상수 포인터(중요) 다중 수준 간접지정 포인터는 다중 수준 간접지정(indirection)을 이용할 수 있다. 어떤 변수가 포인터에 대한 포인터로 선언된 경우를 흔하게 볼 수 있는데, 이를 이중 포인터(double pointer) 라고 부르기도 한다. 이중 포인터에 대한 좋은 예는 main 함수에 전통적인 argc와 argv 매개변수를 통해 프로그램 실행 인자…

C
C++
Understanding_and_Using_C_Pointers
January 11, 2024
포인터의 크기와 데이터 타입

포인터의 크기와 데이터 타입 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 포인터 크기 포인터의 크기는 애플리케이션의 호환성과 다른 환경으로의 이식 가능성을 고민할 때 문제가 된다. 최근의 대부분의 OS에서 포인터의 크기는 일반적으로 포인터 타입에 상관없이 같다. 예를 들면, char에 대한 포인터(char*)는 구조체에 대한 포인터와 크기가 같다! C 표준에서 모든 데이터 타입에 대한 포인터의 크기가 같아야 한다고 명시하고 있지만 않지만, 일반적으로 포인터의 크기는 동일하다. 하지만 함수에 대한 포인터와 데이터에 대한 포인터의 크기는 다를 수도 있다. C는 코드와 데이터 포인터…

C
C++
Understanding_and_Using_C_Pointers
January 10, 2024
void포인터와 전역, 정적포인터

void포인터와 전역, 정적포인터 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 void 포인터 void 포인터는 어떤 타입의 데이터도 참조할 수 있는 범용 포인터다. 아래에 void 포인터 선언의 예제가 있다. void 선언에는 두 가지 흥미로운 것이 있다. void 포인터는 char 포인터와 같은 표현과 메모리 정렬 방법을 사용한다. void 포인터는 다른 포인터와 절대 같지 않다. 하지만 NULL 값이 할당된 두 개의 void 포인터는 서로 같다. void 포인터의 실제 동작은 시스템에 따라 다르다. ⚠️ void 포인터는 데이터 타입의 포인터에 사용되며, 함수 포인터에는 사…

C
C++
Understanding_and_Using_C_Pointers
January 09, 2024
Null의 개념

Null의 개념 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 Null의 개념 널(Null)은 매우 흥미로운 주제다. 하지만 종종 널이 가진 다양한 개념들이 잘못 이해되거나 혼란을 일으킨다. 널은 다음과 같은 개념들을 포함한다. 널 개념 널 포인터 상수 NULL 매크로 NUL 아스키 문자(\0) 널 문자열 널 문장(;) 포인터에 NULL이 할당되면 해당 포인터는 아무것도 가리키지 않음을 의미한다. 널 개념은 포인터가 다른 포인터와 다른 특별한 값을 가질 수 있음을 의미한다. 널이 할당된 포인터는 메모리의 어떤 영역도 가리키지 않으며 두 개의 널 포인터는 항상 서로 같다. 실제 널…

C
C++
Understanding_and_Using_C_Pointers
January 09, 2024
포인터 선언하기

포인터 선언하기 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 포인터 선언하기 포인터 변수는 가리킬 대상의 데이터 타입과 별표 그리고 변수 이름을 순서대로 나열하여 선언한다. 별표 주위에 공백 문자를 사용하는지 여부는 선언에 전혀 영향을 주지 않는다. 다음 선언들은 모두 동등하다 공백 사용은 단지 사용자 취향의 문제다. 별표는 변수를 포인터로 선언하는 데도 사용되지만, 두 수를 곱하거나 포인터를 역참조하는 데도 사용된다. 포인터 선언을 읽는 방법 포인터 선언을 이해하기 쉽게 읽는 방법은 바로 뒤에서부터 읽는 것이다. 변수 pci : 포인터 변수 pci : 정수를 가리키는 포인…

C
C++
Understanding_and_Using_C_Pointers
January 09, 2024
포인터를 잘 알아야 하는 이유

포인터를 잘 알아야 하는 이유 Understanding and Using C Pointers: Core Techniques for Memory Management 1st Edition을 읽고 정리한 내용을 기술합니다. 포인터를 잘 알아야 하는 이유 포인터 선언하기 Null의 개념 void포인터와 전역, 정적포인터 포인터의 크기와 데이터 타입 일반적인 포인터 사용 동적 메모리 관리 포인터를 잘 알아야 하는 이유 포인터는 다음과 같은 용도로 사용된다. 빠르고 효율적인 코드 작성 다양한 문제에 대한 효과적인 해결 방법 제공 동적 메모리 할당 지원 작고 간결한 표현의 사용 큰 오버헤드 없이 데이터 구조를 포인터로 전달 함수의 매개변수로 전달된 데이터 보호 포인터는 하드웨어의 구조에 좀 더 가까우므로 빠르고 효율적인 코드의 작성이 가능하다. ⇨ 컴파일러는 좀 더 쉽게 포인터의 동작을 머신 코드로 변환할 수 있다. 포인터는 다른 연산자에 비해 발생하는 오버헤드가 적다. (ex: 배열과 포인…