C 언어에서 메모리 복사 이해하기

  • 3 minutes to read

이 블로그 글에서는 C 언어에서 메모리 복사를 이해하고, 직접 구현한 메모리 복사 함수를 사용하는 예제인 memory_copy_example.c 코드를 자세히 살펴보겠습니다.

코드: memory_copy_example.c

/* 메모리를 복사하는 함수 만들기 */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// MemoryData 구조체 정의
typedef struct {
	int x;
	int y;
	char buffer[30];
} MemoryData;

// 함수 원형 선언
void* custom_memcpy(void* dest, const void* src, size_t count);
void display_buffer(const MemoryData* mem_data);

int main(void)
{
	MemoryData mem_data1, mem_data2;

	// mem_data1 초기화
	mem_data1.x = 5;
	mem_data1.y = 10;
	strcpy(mem_data1.buffer, "memory copy");

	// mem_data1의 내용을 mem_data2로 복사
	custom_memcpy(&mem_data2, &mem_data1, sizeof(mem_data1));

	// mem_data2의 버퍼를 출력
	display_buffer(&mem_data2);

	return 0;
}

// custom_memcpy 함수 구현
// dest: 복사할 목적지 메모리 주소
// src: 복사할 원본 메모리 주소
// count: 복사할 바이트 수
void* custom_memcpy(void* dest, const void* src, size_t count)
{
	void* ret = dest;

	// 원본 메모리에서 목적지 메모리로 바이트 단위로 복사
	while (count--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}

	return ret;
}

// display_buffer 함수 구현
// mem_data: 출력할 MemoryData 구조체의 주소
void display_buffer(const MemoryData* mem_data)
{
	puts(mem_data->buffer);
}
memory copy
  1. 메모리를 관리하는 구조체 MemoryData를 정의합니다. 이 구조체에는 정수형 변수 xy 그리고 문자형 배열 buffer가 포함되어 있습니다.

  2. 사용자 정의 메모리 복사 함수인 custom_memcpy와 구조체의 버퍼를 출력하는 display_buffer 함수의 원형을 선언합니다.

  3. main 함수에서 MemoryData 구조체 두 개를 선언하고 초기화합니다. mem_data1buffer에 "memory copy" 문자열을 복사한 후, custom_memcpy 함수를 사용하여 mem_data1의 내용을 mem_data2로 복사합니다.

  4. custom_memcpy 함수는 인자로 받은 원본 메모리(src)에서 목적지 메모리(dest)로 바이트 단위로 복사를 수행합니다. 이 과정에서 count를 감소시키며 모든 바이트를 복사하고, 최종적으로 목적지 메모리 주소를 반환합니다.

  5. display_buffer 함수는 인자로 받은 MemoryData 구조체의 buffer를 출력합니다. 이 예제에서는 mem_data2의 버퍼를 출력합니다.

이 글에서는 C 언어로 작성된 memory_copy_example.c 코드를 살펴보며 메모리 복사에 대한 이해를 돕고자 했습니다. 사용자 정의 메모리 복사 함수인 custom_memcpy를 사용해 메모리를 복사하고, 결과를 출력하는 방법을 배웠습니다. 이를 통해 메모리 복사에 대한 기본 개념을 익히고 실제 구현을 연습할 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com