티스토리 뷰
C와 C++는 메모리 관리에 더 많은 제어 기능을 제공해 잠재적인 차이점을 제공하는 반면, Python은 이러한 세부 사항을 추상화해 일부 효율성을 희생하는 대신 개발을 간소화한다.
- C, C++ Low-Level Memory Management
- Manual Memory Allocation (수동 메모리 할당)
- C
: C에서는 malloc, calloc, realloc, free와 같은 함수를 사용해 메모리를 직접 관리한다.- malloc(size_t size)
: 초기화 되지 않은 메모리의 크기(바이트)를 할당한다. - calloc(size_t num, size_t size)
: num 요소 배열의 각 크기 바이트에 대한 메모리를 할당하고 모든 바이트를 0으로 초기화한다. - realloc(void *ptr, size_t size)
: ptr이 가리키는 메모리 블록의 크기를 size 바이트로 변경한다. - free(void *ptr)
: 이전에 malloc, calloc 또는 realloc으로 할당된 메모리를 회수한다.
- malloc(size_t size)
- C++
: C++에서는 메모리 할당 및 해제를 위해 new 및 delete 연산자를 사용한다.- new
: 메모리를 할당하고 객체 초기화를 위해 생성자(constructor)를 호출한다. - delete
: 메모리 할당을 해제하고 객체 정리를 위해 소멸자(destructor)를 호출한다.
- new
- C
- Control Over Memory Layout (메모리 레이아웃 제어)
: 메모리를 할당하는 방법과 위치를 직접 제어할 수 있다. 이를 통해 memory pooling, custom allocators(사용자 지정 할당자), precise control over object lifetimes(객체 수명 정밀 제어)와 같은 최적화를 수행할 수 있다. - Performance Optimization
: 메모리 할당 및 할당을 제어할 수 있으므로 조각화 최소화, 메모리 재사용, 캐시 성능 향상을 위한 데이터 정렬 등 특정 사용 사례에 맞게 최적화할 수 있다. 특히 리소스가 제한된 시스템이나 게임 또는 실시간 시스템과 같이 성능이 중요한 애플리케이션에서 상당항 성능 향상을 가져올 수 있다. - No Garbage Collection
: C와 C++ 에는 자동 가비지 컬렉션이 없다. 즉, 가비지 컬렉션 일시 중지와 관련된 런타임 오버헤드가 없으며, 이는 가비지 컬렉션을 사용하는 언어에서 중요할 수 있다.
- Manual Memory Allocation (수동 메모리 할당)
- Python: Abstracted Memory Management (추상화된 메모리 관리)
- Automatic Memory Management (자동 메모리 관리)
: Python은 reference counting (참조 계수) 및 가비지 컬렉션 시스템을 통해 메모리 관리를 자동으로 처리한다.- Referencing Counting
: 각 객체는 자신을 가리키는 참조 수를 추적한다. 참조 수가 0으로 떨어지면 메모리가 자동으로 할당 해제된다. - Garbage Collection
: 파이썬에는 참조 계수만으로는 처리할 수 없는 순환 참조를 감지하고 정리하기 위한 가비지 컬렉션도 포함되어 있다.
- Referencing Counting
- Ease of Use (사용의 용이성)
: 메모리 관리가 추상화되면 개발자가 수동으로 메모리를 할당하고 할당 해제할 필요가 없으므로 개발이 간소화된다. 따라서 메모리 누수, 관련된 포인터 및 기타 메머리 관련 버그의 위험이 줄어든다. - Overhaed and Performance Impact (오버헤드 및 성능 영향)
: 이러한 사용 편의성의 대가는 메모리를 자동으로 관리할 때 발생하는 오버헤드다. 가비지 컬렉터는 일시 중지를 유발할 수 있으며, 참조 계수는 모든 객체 작업에 약간의 오버헤드를 추가한다. 또한 자동 시스템이 특정 애플리케이션 요구 사항에 맞게 최적화되지 않을 수 있으므로 수동 메모리 관리에 비해 메모리 사용 효율이 떨어질 수 있다. - High-Level Data Structures (고수준 자료 구조)
: Python은 내부적으로 자체 메모리를 관리하는 고수준 자료 구조(list, dictionary, set 등)를 제공한다. 편리하지만 이러한 추상화는 때때로 C 또는 C++에서 수작업으로 최적화한 구조체에 비해 메모리 사용 효율이 떨어질 수 있다.
- Automatic Memory Management (자동 메모리 관리)
아래는 구현 예시다.
- C
#include <stdio.h> #include <stdlib.h> int main() { int *arr; arr = (int*)malloc(10 * sizeof(int)); if (arr == NULL) { fprintf(stderr, "Memory allocation failed\n"); return 1; } for (int i = 0; i < 10; i++) { arr[i] = i * 2; } for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } free(arr); return 0; }
- Python
arr = [i * 2 for i in range(10)] for value in arr: print(value, end=' ')
반응형
'기술(Tech, IT) > C++' 카테고리의 다른 글
[C++] Parameter 관점에 Call by Value (0) | 2024.10.19 |
---|---|
[C++] map VS. unordered_map (2) | 2024.10.17 |
[C++] C++ vs. Python (Performance) (0) | 2024.07.11 |
[C++] Windows Application Subsystem (0) | 2024.03.24 |
[C++] OutputDebugString() 함수 (0) | 2024.03.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- The Economist
- machine learning
- 이코노미스트 에스프레소
- java
- ml
- 파이썬
- 리트코드
- Computer Graphics
- 투 포인터
- vertex shader
- socket programming
- Hash Map
- DICTIONARY
- Android
- C++
- The Economist Espresso
- 머신 러닝
- 티스토리챌린지
- join
- Python
- I2C
- 딕셔너리
- 소켓 프로그래밍
- 안드로이드
- tf-idf
- leetcode
- defaultdict
- 이코노미스트
- 오블완
- min heap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형