미지의 변수는 어떻게 쓰레기 가치를 얻습니까?
-
07-07-2019 - |
문제
변수를 생성하고 초기화하지 않으면 일부 (임의) 숫자가 호출됩니다. 쓰레기 가치 그것에 할당됩니다.
- 이 값은 변수에 어떻게 할당됩니까?
- 이 배후의 전체 개념/메커니즘은 무엇입니까?
- 이것은 C에서만 발생합니까?
해결책
쓰레기 가치는 아닙니다 할당된, 오히려 가치는 이미 있습니다. 변수를 할당 할 때 메모리에 예약을 할 수 있습니다. 메모리에 예약 할 때까지 메모리에는 이전에 "임의의"정보가 포함되어있을 것입니다.
은유로서, 땅을 구입하는 것과 같은 변수를 할당하는 것을 생각하십시오. 집을 짓는 것과 같이 무언가를 할 때까지 땅은 이미 앉아있는 쓰레기가 이미 앉아 있던 집과 같은 집과 같은 것을 가지고 있습니다.
일부 언어는 새로 할당 된 변수를 0으로 자동으로 채우므로 시간이 걸립니다. C와 같은 "Do-it-Yourself"언어 에서이 추가 행동은 보증되지 않습니다 (일부 시스템에서는 언어에 관계없이 메모리가 지워집니다. 예를 들어 보안 측정).
다른 팁
아무도 명시 적으로 획득 값을 할당하지 않습니다. 변수를 작성하는 경우 변수의 위치만이 값이 아닌 결정됩니다. 그것이 우리가 그것을 초기화하는 이유입니다. 쓰레기 가치는 이전 프로세스에 의해 동일한 메모리에 대한 이전 작업에서 나올 수 있습니다! 그래서 그것은 무엇이든 할 수 있습니다. 나는 그것이 꽤 많은 수의 언어를 가지고 있다고 생각합니다. 목록에 대해 잘 모르겠습니다! :)
변수를 생성하고 초기화하지 않으면 아무 일도 일어나지 않습니다. 해당 변수에서 값을 읽으면 변수가 현재 위치한 메모리에서 데이터를 얻습니다. 변수이기 때문에 쓰레기/임의 값처럼 보일 수 있습니다. 어느 정도의 무작위로 메모리에 배치됩니다.
C 표준은 다음과 같습니다.
- 로컬 변수에 대한 정의되지 않은 동작 : (왜) 비 초기 변수를 정의하지 않은 동작을 사용하고 있습니까? (예 : Segfault는 합법적입니다)
- 글로벌 변수의 경우 0 : C에서 선언 된 비 초기 변수는 어떻게됩니까? 가치가 있습니까?
구현 : 구현에 대한 자세한 시험 : https://stackoverflow.com/a/36725211/895245 요약:
- 로컬 : 주소는 결코 작성되지 않았으므로 이전에 무엇이든 사용되었습니다.
- 글로벌 :
.bss