나는 특정 알고리즘을 따르고 실제로는 쓰레기가 아닌지 묻는다.C에서 생성 된 변수의 가비지 값은 어떻게됩니까?
즉, "쓰레기"값이 얼마나 정확하게 표시됩니까? UB를 호출하지 않는 것을 고려하면 가비지 값을 읽으면 그 값의 소스는 무엇입니까?
나는 특정 알고리즘을 따르고 실제로는 쓰레기가 아닌지 묻는다.C에서 생성 된 변수의 가비지 값은 어떻게됩니까?
즉, "쓰레기"값이 얼마나 정확하게 표시됩니까? UB를 호출하지 않는 것을 고려하면 가비지 값을 읽으면 그 값의 소스는 무엇입니까?
표준에는 "가비지"라는 용어는 언급되지 않았지만 "비결정/불확정 값"을 언급합니다. 값은 일 수 있습니다.입니다. 참고
사용자 관점에서 볼 때 특정 값 (모든 변수)에 대한 수정 값을 얻을 수 없다면 "기대 값"이 언제든지 일치하지 않으며 우리가 얻는 값 (있는 경우)은 다음과 같습니다. 어떤 용도로도 사용되지 않으므로 "쓰레기"로 간주됩니다.
가장 일반적이며 일반적인 관찰/구현은 초기화되지 않은 자동 변수의 경우 저장소 만 할당되며 해당 저장소의 내용은 적용되지 않습니다. 그래서, 아마도 그것은이라는 마지막 저장된 값 을 여전히 포함하고있을 것입니다. 이제, 그 값은 아마도 다른 (이전) 시나리오에서 유효한 것으로, 현재의 경우에는 의미가 없기 때문에 현재 시나리오에서는 "쓰레기"입니다.
TL; DR는 "가비지"값은 대부분의 경우에, 그 해당 메모리 위치의 단지 마지막 저장된 값이다, 생성하지 된다.
는참고 : 그 값은 불확정
관련, C11
에서 인용 자동 저장 기간을 가진 개체를 명시 적으로 초기화하지 않는 경우 장 §6.7.9
입니다. [...]
이것은 매우 밀접하므로 각주로 추가 주제에 관한 것이다.
이 경우, 변수의 어드레스하려는 다음
촬영되지 않은 데이터 유형이 트랩 표현을
초기화되지 않은 경우 스택의 변수 (자동 변수라고도 함)에 가비지 값이 존재합니다. 스택에있는 주소, 이전 함수 호출 등에있는 이전 변수로 푸시, 팝, 초기화됩니다.
C가 스택과 힙에 메모리를 할당 할 때 메모리 주소에 저장된 것을 수정하지 않고 단순히 변수의 공간을 지정합니다. 초기화되지 않은 변수는 변수를 선언하기 전에 해당 위치의 메모리에 있던 값을 포함합니다. 때로는 값이 사용되어 지워지는 프로그램의 이전 메모리가 될 것이며, OS, 스택 카나리 등의 값이 될 것입니다. 거기에 있을지 예측할 방법이 없습니다.
또한 일부 C 변수는 프로세서 레지스터에만 저장되며 "가비지 값"은 이전에 저장된 레지스터의 데이터입니다. –
모든 특정 메모리 주소 (스택 또는 힙)에는 일부 데이터가있을 것입니다. 해당 메모리를 변수에 할당하기 전에 다른 변수 (OS 또는 다른 프로그램이 될 수 있음)에서 사용할 수 있습니다. 따라서 마지막으로 할당 된 변수에 의해 할당 된 마지막 값을 포함 할 수 있습니다. 그리고 그 가치들은 이제 우리에게 쓸모가 없습니다. 그게 우리를 위해 쓰레기가 된 이유
쓰레기는 쓰레기입니다. 알고리즘이 있다면 가비지가 아니기 때문에 "알려진 정의 가능하고 아마도 재현 가능한 패턴으로 바보 같은 값이 생성됩니다." – John3136
미리 알고 있었기 때문에 오버 헤드가 발생하지 않아 지정된 값으로 설정됩니다. 알고리즘이 없습니다. –
정의되지 않은 행동에 관한 질문을 복제본으로 표시하기 위해이 사이트에서 사용할 수있는 결정적 요소가 있습니까? – paddy