메모리 10

[C] 메모리 동적 할당

동적 할당 개요 이번 시간에는 C 언어의 핵심 요소 중 하나인 메모리 관리와 동적 할당에 대해 집중적으로 살펴보겠다. 동적 할당(Dynamic Allocation)은 프로그램 실행(런타임) 도중 필요한 메모리 공간을 할당하는 과정으로, 메모리 자원이 제한적인 환경에서 특히 중요하다. C 언어는 malloc, calloc, realloc, free와 같은 함수를 통해 개발자가 메모리를 효율적으로 관리할 수 있도록 지원한다. 이러한 동적 할당 메커니즘을 통해, 개발자는 필요한 메모리만을 할당하고, 사용이 끝난 메모리를 해제함으로써 시스템의 메모리 사용을 최적화할 수 있다. 본문 사용 이유 동적 메모리 할당과 해제는 C언어에서 메모리 사용의 효율성을 높이는 중요한 역할을 한다. 정적 할당 방식에서는 프로그램이..

Language/C 2024.01.29

[C] 포인터(Pointer)

Pointer 개요 포인터(Pointer)는 프로그래밍에서 광범위하게 사용되는 개념으로, 특히 C 언어와 같은 저수준 프로그래밍 언어에서 중요한 역할을 한다. 포인터는 메모리의 주소를 저장하고, 이를 통해 다양한 데이터에 간접적으로 접근할 수 있는 변수다. C 언어에서 포인터는 메모리 관리, 배열과 문자열 처리, 동적 메모리 할당, 데이터 구조체 구현 등 여러 분야에서 핵심적인 도구로 사용된다. 이러한 포인터의 사용은 프로그램의 유연성과 효율성을 높이는 동시에, 복잡하고 섬세한 메모리 관리를 가능하게 한다. 본문에서는 포인터가 C 언어에서 어떻게 동작하며, 왜 그렇게 널리 사용되는지에 대해 자세히 살펴보겠다. 본문 사용 이유 포인터를 사용하면 메모리를 효율적으로 사용할 수 있다. 이는 포인터를 사용하면 ..

Language/C 2024.01.22

[마이크로프로세서] 메모리 분류

메모리 분류 개요 지난 컴퓨터 구조 시간에 메모리에 관해 전반적인 공부를 했었다. 이번 시간에는 메모리 분류에 초점을 맞춰 공부해 보도록 하겠다. 본문 해당 사진은 메모리를 제조 재료, 휘발성 등으로 나눈 분류표다. 우리가 중점적으로 다뤄야 하는 것은 반도체 메모리며, 이를 휘발성과 비휘발성으로 나눠 알아보자. 휘발성 메모리(RAM) 먼저 휘발성 메모리는 크게 SRAM과 DRAM으로 나눌 수 있다. SRAM은 속도가 빠르지만 가격이 비싸다는 단점이 있고, 반대로 DRAM은 속도가 느린 대신 가격이 싸다는 장점이 있다. 따라서 이 둘의 특성에 맞게 자주 접근할 수 있는 캐시 메모리는 SRAM으로 만들고, 자주 접근하지 않지만 용량이 큰 주기억장치 메모리는 DRAM으로 만든다. 비휘발성 메모리(ROM) 롬은..

[마이크로프로세서] 개요

Micro Processor 개요 지난 컴퓨터 구조 시간에서 배웠듯이, 컴퓨터는 하드웨어와 소프트웨어로 구성되는 명령어를 처리하는 기계다. 우리가 일반적으로 사용하는 범용 컴퓨터(PC)는 그 구조 내에 다양한 부품과 기능들을 내장하고 있어, 복잡한 작업들도 손쉽게 처리할 수 있다. 그렇다면 컴퓨터의 핵심이 되는 기본 구성 요소는 무엇일까? 바로 CPU, 메모리(주 메모리, 보조 메모리), 입출력 장치다. 이러한 핵심 부품들이 통합된 장치를 컴퓨터로 정의할 수 있다. 이때, 마이크로컴퓨터라는 용어는 이러한 핵심 부품들을 포함하면서도, 마이크로프로세서를 중심으로 간소화된 구조를 가진 컴퓨터를 의미한다. 초기의 마이크로컴퓨터는 대형 컴퓨터나 미니 컴퓨터에 비해 작고, 특정한 목적에 맞춰진 작업을 수행하도록 설..

[C++] 싱글톤 패턴의 메모리 할당과 해제 with C++

할당과 해제 개요 앞서 설명한 내용들을 토대로 싱글톤 패턴으로 디자인된 클래스에서 소멸자에 메모리를 해제하는 코드를 추가하는 것은 주의해야 한다는 점을 알았다. 따라서 new 키워드로 호출된 인스턴스를 할당 해제 하는 방법들에 대해 알아보자. 본문 싱글톤으로 디자인된 클래스의 인스턴스 메모리를 해제하려면 다음과 같은 방법을 사용할 수 있다. 정적 메서드 추가 인스턴스를 불러오는 공개된 정적 멤버 함수처럼, 인스턴스의 메모리를 해제하는 정적 메서드를 추가하면 된다. 이를 테면, #include class singleton { static singleton* _instance; singleton(); ~singleton(); singleton(const singleton&) = delete; singleto..

카테고리 없음 2023.08.17

[C++] 싱글톤 패턴의 생성자와 소멸자 동작 이해 - new, delete키워드 with C++

new 키워드의 이해 지난 게시글에서는 static 키워드에 대해 알아보았었다. 이번 시간에는 싱글톤 패턴으로 디자인되었을 때 소멸자가 호출되지 않는 이유를 new 키워드에 초점을 맞춰 설명해 보도록 하겠다. C++ Reference에서는 new로 생성된 오브젝트가 그것이 생성된 범위에서 해제되지 않는 동적 메모리 할당을 위해 사용된다고 설명하고 있다. 즉, 프로그램 실행 중에 할당되며, 그 크기나 수명이 컴파일 시점에서 결정되지 않고, 필요에 따라 할당되거나 해제될 수 있다는 것을 의미한다. new 키워드를 사용할 때 몇 가지 주의사항이 있다. 이를 꼭 체크하고 사용하는 습관을 기르자. 메모리 누수: new로 동적 메모리를 할당하면, 반드시 delete를 사용하여 할당된 메모리를 반환해야 함. 그렇지 ..

Language/C++ 2023.08.13

[컴퓨터구조] 메모리

메모리 개요 보조기억장치는 전원을 꺼도 데이터를 보존하는 비휘발성 저장 장치로, 이곳에는 데이터나 프로그램을 영구적으로 저장한다. 그러나 CPU와 보조기억장치 간에는 큰 데이터 전송 속도 차이가 있고, 두 장치 사이에 운영 체제가 중재 역할을 하므로, CPU는 보조기억장치에 직접 접근할 수 없다. 이 문제를 해결하기 위해, 실행될 프로그램이나 데이터는 보조기억장치에서 먼저 주 메모리인 RAM으로 복사된다. RAM은 휘발성 메모리로, 전원이 꺼지면 그 내용이 사라지지만, CPU가 빠르게 접근하여 데이터를 읽고 쓸 수 있게 한다. 따라서 RAM의 용량은 시스템 성능에 큰 영향을 미친다. RAM의 용량이 클수록 보조기억장치에서 더 많은 데이터를 미리 로드하여 저장할 수 있게 되는데, 이는 여러 프로그램을 동시..

CS/컴퓨터구조 2023.06.22

[컴퓨터구조] 캐시 메모리

메모리 계층 구조와 캐시 메모리 저장 장치 계층 구조 메모리 계층 구조(Memory Hierarchy)는 시스템 성능 최적화를 위해 다양한 유형의 메모리 저장소를 계층적으로 구성하는 방식을 의미한다. 이 계층 구조는 데이터의 속도, 용량, 비용 등의 요소를 고려하여, CPU로부터 얼마나 가까운 위치에 있는지를 기준으로 구성된다. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 장치는 느리다 속도가 빠른 저장 장치는 저장 용량이 적고, 가격이 비싸다 계층 구조의 상위에 위치하는 메모리는 하위 계층의 메모리보다 빠르지만, 용량은 적고 가격이 비싸다. 반대로 하위 계층의 메모리는 상위 계층의 메모리보다 느리지만, 용량이 크고 가격이 싸다. 컴퓨터 시스템은 이러한 계층 구조 내의 모든 메모리를 활용하여 최적의 ..

CS/컴퓨터구조 2023.06.21

[컴퓨터구조] 명령어의 이해

명령어 저급 언어와 고급 언어 우리가 프로그램을 만들 때 사용하는 프로그래밍 언어는 컴퓨터가 이해하는 언어와 인간이 이해하는 언어로 나뉜다. 여기서 사람을 위한 언어는 고급(high-level) 언어라고 하고, 컴퓨터를 위한 언어는 저급(low-level) 언어라고 한다. 즉, 고급 언어로 작성된 소스 코드가 실행되려면 반드시 저급 언어, 즉 명령어로 변환되어야 한다. 먼저 명령어로 이루어진 저급 언어에 대해 다뤄보자. 저급 언어에는 기계어와 어셈블리어 두 가지 종류가 있다. 기계(machine)어는 0과 1의 명령어 비트로 이루어진 명령어 모음이다. 기계어는 이진수로 이루어져 있지만, 가독성을 위해 아래와 같이 16진수로 표현하기도 한다. 하지만 오로지 컴퓨터만을 위해 만들어진 기계어는 사람이 읽으면 ..

CS/컴퓨터구조 2023.06.03