C 언어에서 메모리 복사 이해하기
이 블로그 글에서는 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
메모리를 관리하는 구조체
MemoryData
를 정의합니다. 이 구조체에는 정수형 변수x
와y
그리고 문자형 배열buffer
가 포함되어 있습니다.사용자 정의 메모리 복사 함수인
custom_memcpy
와 구조체의 버퍼를 출력하는display_buffer
함수의 원형을 선언합니다.main
함수에서MemoryData
구조체 두 개를 선언하고 초기화합니다.mem_data1
의buffer
에 "memory copy" 문자열을 복사한 후,custom_memcpy
함수를 사용하여mem_data1
의 내용을mem_data2
로 복사합니다.custom_memcpy
함수는 인자로 받은 원본 메모리(src
)에서 목적지 메모리(dest
)로 바이트 단위로 복사를 수행합니다. 이 과정에서count
를 감소시키며 모든 바이트를 복사하고, 최종적으로 목적지 메모리 주소를 반환합니다.display_buffer
함수는 인자로 받은MemoryData
구조체의buffer
를 출력합니다. 이 예제에서는mem_data2
의 버퍼를 출력합니다.
이 글에서는 C 언어로 작성된 memory_copy_example.c
코드를 살펴보며 메모리 복사에 대한 이해를 돕고자 했습니다. 사용자 정의 메모리 복사 함수인 custom_memcpy
를 사용해 메모리를 복사하고, 결과를 출력하는 방법을 배웠습니다. 이를 통해 메모리 복사에 대한 기본 개념을 익히고 실제 구현을 연습할 수 있습니다.