PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2016/09/02 09:11:36
Name 물리쟁이
Subject [질문] [c언어] 쓰레기값에 대해서 궁금한게 있습니다.
변수를 선언하고 값을 초기화 시키지 않으면 임의의 쓰레기 값이 변수의 주소에 들어가잖아요.

나름 곰곰이 생각해봤는데
초기화시킨 변수와 대입을 한 변수는 의도된 사용할 장소가 있을텐데 쓰레기 값이 들어간 변수는 어디 마땅히 쓸 곳도 없는데

왜 있는 거죠? 차라리 강제로 값을 지정해놓게 하지 왜 허용해 둔 건가요?


통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
16/09/02 09:12
수정 아이콘
초기 값를 넣는 것도 시간이 소요되기 때문입니다.
초기화를 할 것인지 말 것인지도 사용자에게 권한을 주는 거죠.
16/09/02 09:29
수정 아이콘
변수를 만들었다는 것은 어떤 값을 넣기를 의도한다는 것인데..
아직 값을 넣기 전에 쓰레기 값이나 어떤 값을 강제로 초기화 해둔 값이나 의도에서 벗어나는 쓰레기 값인건 마찬가지죠..
보통 이 문제는 iteration이나 summation할때 일어나니.. 그냥 0으로 해두면 좋은거 아니냐 하실수 있지만..
그런 친절한 언어도 있긴합니다만.. c는 그런 언어가 아니죠.. 흐흐..
BakkyFan
16/09/02 09:30
수정 아이콘
쓰레기 값이 변수의 주소에 들어가는게 아니라
원래 그 주소에 있던 값입니다

초기화 하지 않고 주소만 할당해주는거죠.
시간을 투자해 초기화 할지 말지를
프로그램에서 결정하는거고요.

강제로 언어레벨에서 초기화하게 되면 그만큼
성능이 떨어지는거죠.
16/09/02 09:31
수정 아이콘
선언을 하는 순간 쓰레기 값이 변수의 주소에 "들어가"는 것이 아니라,
선언하기 전에 메모리에 들어가 있던 쓰레기 값들이 선언을 통해 변수가 그 위치에 할당됨에 따라서 아무 의미 없는 값들이 읽혀져 나오는 것입니다.
int a;는 어떤 비어있는 메모리 공간에 변수 a를 할당하는 것으로 끝나고
int a=10;은 비어있는 메모리 공간에 변수 a를 할당하기 + 그 공간에 정수 10을 넣기라는 두 가지 과정을 거치는데,
정수 10을 넣어주는 것 또한 시간이 소요되기 때문에, 자유도가 높은 low-level language인 c언어의 경우는 그것마저 사용자가 알아서 할 수 있도록 허용하는 거죠.
16/09/02 09:49
수정 아이콘
c언어는 어셈블리 다음 가는 기계 친화적인 고성능 언어입니다. 옛날에는 변수 초기화하는 것조차도 다 비용이었죠.
지금의 프로그래머들한테는 정말로 불친절하게도 c언어는 딱 하라는 것만 합니다. 크크..
김연우
16/09/02 10:32
수정 아이콘
집 매매했는데, 전 집주인이 청소 안해놨으면 드럽겠죠.

'어차피 다음 집주인이 청소해야 하는데 청소 좀 해주지'싶기도 하지만, 집 허물고 재건축할 수도 있으니까..
한화이글스
16/09/02 12:59
수정 아이콘
비유 좋네요!
16/09/02 11:40
수정 아이콘
근본적으로는, c에서는 모든 변수를 함수 처음에 선언해서 공간을 할당해놓기 때문입니다.
전방 선언하는 구조에서 모든 변수의 초기화라는 말 자체가 좀 넌센스입니다.
어떤 값으로 초기화해야할 지는 함수 내에서의 연산결과에 따라 달라질 수 있기 때문에요.

전방 선언을 하지 않아도 될 때, 적절한 초기화 값을 얻는 즉시 변수를 선언하고 초기값을 대입하는 것이 가능해집니다.
(물론 그렇다고 하더라도 스택 내에 변수 공간을 미리 할당해 놓는것은 마찬가지입니다. 언어 문법 상 선언 위치 이전에 접근하는 것이 불가능 할 뿐..)
한화이글스
16/09/02 13:01
수정 아이콘
다른 분들이 좋은 답변들 다 해주셨네요.
1. 변수를 선언한다 -> 메모리 공간을 할당 받는다.
2. 이 메모리 공간은 다른 프로그램이 사용했던 메모리일 수 있다.
3. 다른 프로그램은 해당 메모리 공간에 어떤 값을 저장해서 써먹었다.
4. 다른 프로그램이 종료되더라도 실제 메모리에 저장되어 있는 데이터는 남아 있는다.
5. 그러므로 초기화 되지 않은 변수의 경우, 알 수 없는 값이 나오게 된다.
Phlying Dolphin
16/09/02 20:18
수정 아이콘
비슷한 걸로 behavior가 undefined인 것들도 있는데, 역시 효율(런타임 자원 먹는거나, 컴파일러 만들기 쉽게) 때문에 그런 것들이 많습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
89351 [질문] 강동구 쪽 분위기 괜찮은 맛집 추천해주세요! [2] 잠이오냐지금2468 16/09/02 2468
89350 [질문] [LOL] 도와주세요! 친구와 룰루 1대1 미러전을 하기로 했습니다. [8] 베이비블루3708 16/09/02 3708
89349 [질문] 서울-출근시간대에 이 노선 많이 막힐까요??(지도첨부) [4] 원스2314 16/09/02 2314
89348 [질문] 마우스 우클릭으로 새폴더 만들기 [9] 모노크롬5353 16/09/02 5353
89347 [질문] C++ 컴파일러 보통 뭐쓰나요?? [25] Kobe22489 16/09/02 22489
89345 [질문] [오버워치] 경쟁전 시즌2 배치보셨나요? [8] 손나이쁜손나은2587 16/09/02 2587
89344 [질문] 면도가 왜 비호감이 된 건가요? [10] 비싼치킨4730 16/09/02 4730
89343 [질문] 애니메이션 제목을 찾습니다. [2] 라이디스2720 16/09/02 2720
89342 [질문] 컴퓨터가 이상증세를 보이고 있습니다.. 도와주세요 [11] 별이돌이2449 16/09/02 2449
89341 [질문] 저 연고를 모르고 "냉동고"에 넣었는데.. 괜찮나요? [14] 50b2947 16/09/02 2947
89340 [질문] [컴퓨터] 예전에 샀던 파워와 현재 중고로 온 파워중 어떤걸 사용하면 좋을까요? [7] 토우2485 16/09/02 2485
89339 [질문] 개인이 자동차 리스승계 진행 시 궁금증 [2] 겸둥윤봉님3303 16/09/02 3303
89338 [질문] 대부도 맛집 추천 부탁드립니다 Matt Harvey3595 16/09/02 3595
89337 [질문] 컴퓨터 조립하려고 합니다. 몇가지 질문 있습니다. [13] 불통왕2511 16/09/02 2511
89336 [질문] 장모님을 서울(근교) 주말 당일치기로 모실 만한 곳? [4] Jannaphile2224 16/09/02 2224
89335 [질문] 휴대폰 공기기 개통 문의입니다. [2] 먼산바라기2010 16/09/02 2010
89334 [질문] 남자 혼자 갈만한 곳 있을까요? [8] 패스파인더4854 16/09/02 4854
89333 [질문] (연애)썸녀랑 의도치 않게 커플룩일때 [20] arr4452 16/09/02 4452
89332 [질문] 공룡 관련해서 아이들과 갈만한 곳 [16] possible3472 16/09/02 3472
89331 [질문] 윈도우 업데이트 이후 컴퓨터가 너무 느려졌습니다. [2] 슬라임2561 16/09/02 2561
89330 [질문] 모니터가 자꾸 꺼집니다. [8] 시지프스3976 16/09/02 3976
89329 [질문] 이거 컴퓨터 바이러스 인가요? [17] will3231 16/09/02 3231
89328 [질문] 효도폰 혼자서 개통 가능한가요? [3] 탄야2577 16/09/02 2577
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로