윈도우 프로그래밍에서 맨날 메모리를 0으로 초기화할 때 memset은 안 쓰고 ZeroMemory를 쓴다.
ZeroMemory
ZeroMemory는 매크로의 일종으로 정의는 다음과 같다.
// minwinbase.h
#define MoveMemory RtlMoveMemory
#define CopyMemory RtlCopyMemory
#define FillMemory RtlFillMemory
#define ZeroMemory RtlZeroMemory
// winnt.h
#define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
그냥 단순하게, 지정된 주소(dest)에 길이(length)만큼 memset으로 바이트 단위로 0으로 채워주는 역할을 한다.
사용할 땐 ZeroMemory([목표 주소], [길이]) 꼴로 쓴다.
배열이나 구조체 등을 초기화할 때 자주 사용한다.
예시
struct exampleStruct
{
int a;
int b;
int c;
}
struct exampleStruct exStruct;
ZeroMemory(&exStruct, sizeof(exStruct));
memset의 정의
memset은 다음과 같이 정의된다.
#include <string.h> // C++ 에서는 <cstring>
void* memset ( void* ptr, int value, size_t num );
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
Program:Win32/Wacapew.C!ml : Windows 11에서 멀쩡한 C언어 파일이 트로이 목마로 착각되는 문제(MinGW) (0) | 2024.02.24 |
---|---|
[C++] 레퍼런스, const 레퍼런스 반환 / 레퍼런스와 임시 개체의 수명 (1) | 2024.02.05 |
[C/C++] 함수 호출 규약 __stdcall과 __cdecl에 관하여 (0) | 2023.08.03 |
[C++] 스마트 포인터 - unique_ptr과 안전하게 쓰는 방법 (0) | 2023.07.20 |
[C++] 왜 string은 반환이 될까? 객체는 반환할 때 복사된다(+구조체) (0) | 2022.01.20 |
댓글