> 백엔드 개발 > C++ > C의 'new'가 메모리를 0으로 초기화합니까?

C의 'new'가 메모리를 0으로 초기화합니까?

Linda Hamilton
풀어 주다: 2024-12-11 06:53:09
원래의
645명이 탐색했습니다.

Does `new` in C   Initialize Memory to Zero?

new 연산자는 메모리를 0으로 초기화합니다

C에서는 new 연산자가 동적 메모리 할당에 일반적으로 사용됩니다. 지정된 크기의 메모리 블록을 할당하고 할당된 메모리에 대한 포인터를 반환합니다. 그러나 new가 할당된 메모리를 0으로 초기화하지 않는다는 일반적인 오해가 있습니다. 이 기사에서는 new가 메모리를 초기화하는 방법을 설명하고 명백한 불일치를 해결합니다.

기본 및 0 초기화

new를 사용하여 기본 유형(예: int)의 객체를 생성하는 경우 , unsigned int), 두 가지 변형이 있습니다:

  • wsk = 새로운 서명되지 않은 정수; - 기본 초기화: 초기화가 수행되지 않으며 메모리는 초기화되지 않은 상태로 유지됩니다.
  • wsk = new unsigned int(); - Zero 초기화: 메모리가 0으로 설정됩니다.

배열에도 동일하게 적용됩니다:

  • wsa = new unsigned int[5]; - 기본 초기화
  • wsa = new unsigned int[5](); - 제로 초기화

제로 초기화 설명

new는 일반적으로 불확실한 값으로 프리미티브를 초기화하지만 빈 괄호 구문(new)으로 제로 초기화를 사용할 때 예외가 발생합니다. 유형();). 그러면 메모리가 0으로 초기화됩니다. C 11 표준은 다음 동작을 지원합니다.

[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
로그인 후 복사

Placement New

Placement new를 사용하면 특정 위치에 메모리를 할당할 수 있습니다. 0 초기화로 이 기술을 활용하면 메모리가 실제로 0으로 설정되어 있음이 분명해집니다.

//... (memory allocation and initialization code)
wsa[0] = 1;  // Modify the memory location
wsa[1] = 2;  // Modify the memory location
// ... (more modifications)
//...
로그인 후 복사

메모리에 원래 값(1, 2, ...)이 포함된 경우 0 초기화는 실패한. 그러나 출력에서는 할당된 메모리가 0으로 설정되었음을 확인합니다.

따라서 new는 일반적으로 기본 메모리를 0으로 초기화하지 않지만 0 초기화(new type();)를 사용하면 메모리를 0으로 초기화합니다. 이는 직접 메모리 할당과 신규 배치 모두에 해당됩니다.

위 내용은 C의 'new'가 메모리를 0으로 초기화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿