디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

c++ 고수님들 질문 하나만

aaa(125.186) 12-13 02:23:15
조회 101 추천 0 댓글 22
							

c++에서 전역변수가 아닌 변수들은 스택에 저장되는걸로 아는데


예를 들어


int main()

{

int a = 1;

if(a)

{

int b =2;

a += b;

}

return 0;

}


이런코드가있다고하면 b는 main스코프내에서 생성되는거냐 아니면 if문 안에서 생성됏다가 사라지는거냐?

나는 후자라고 생각하는데 후자가 너무 스택쌓이는게 너무 많아서 성능문제가있는거같은데 맞냐?

추천 비추천

0

고정닉 0

0

댓글 영역

전체 리플 22
등록순정렬 기준선택
  • ananyn갤로그로 이동합니다.

    언어개념상으로는 후자가 맞는데 컴파일러단에서는 전자처럼 처리해줄지도..?

    12.13 02:28:33
    • aaa(125.186)

      아니 후자로 설계하니까 재귀함수에 블록스코프있으면 스택쌓이는게 미침...

      12.13 02:35:33
    • ananyn갤로그로 이동합니다.

      헉 진짜? 느낌상으로는 컴파일러가 알아서 최적화 잘 해주지싶은데..

      12.13 02:37:30
  • codesafer갤로그로 이동합니다.

    후자쥬~ 블럭안이 life scope

    12.13 02:37:01
  • 안드의노예(223.222)

    그건 컴파일러 스펙 봐야할듯? 스택에다 안쌓으면 고대로 데이터/힙에다 쌓을텐데 그건 더 손해지 ㅋㅋ 콜스택 끝나고나서 메모리가 반환된다는 보장이 없는데

    12.13 02:37:34
  • codesafer갤로그로 이동합니다.

    컴파일러 스펙 볼 필요 없지 클래스 하나 생성해보면 되잖아

    12.13 02:38:27
    • aaa(125.186)

      프갤의 보배 코세님 해답을 알려주십쇼...

      12.13 02:39:04
  • ananyn갤로그로 이동합니다.

    그냥 저 b에 해당하는애들 static처리해주면 안됨? 그렇게 해서 해결안되는문제면 아마 그냥 원래 그정도 스택 쌓여야 할 문제인거같은뎅

    12.13 02:40:26
    • aaa(125.186)

      나는 이렇게 구현햇거든? 스코프마다 id리스트 만들어서 번호매겨서 위치기반으로 호출하는데 전역변수로 바꿔버리면 안되지않을까

      12.13 02:43:40
    • ananyn갤로그로 이동합니다.

      어떤상황인지몰겟다 진짜 코드를 봐야댈듯 ㅋㅋ

      12.13 02:57:48
  • codesafer갤로그로 이동합니다.
    12.13 02:43:07
  • codesafer갤로그로 이동합니다.

    재귀함수 꼴을 봐야 해결방법이 감이 올것 같은디?

    12.13 02:44:05
  • codesafer갤로그로 이동합니다.

    어쨌든 당연하게도 중괄호 안이 life scope

    12.13 02:44:33
    • aaa(125.186)

      정보 감사합니다..

      12.13 02:46:37
  • codesafer갤로그로 이동합니다.

    함수 구조를 보여주면 좀 더 해석해줄께.

    12.13 02:48:25
    • aaa(125.186)

      함수 그냥 메모이제이션 예제 나온거 돌려봣는데 오류뿜뿜해서 물어봣어여 ㅠㅠ;

      12.13 02:52:15
    • codesafer갤로그로 이동합니다.

      앙 ㅋㅋ 그게 꼭 인스턴스가 필요한건지 생각해서 필요한거면 뭐 어쩔수 없는거지. 재귀 트리의 증가 감소가 일정한 룰이 있으면 잡을 순 있음.

      12.13 02:55:10
  • ㅇㅇ(123.109)

    변수 b의 유효 범위는 if문 {}내에서가 맞다. 이게 C++언어 상에서 얘기고. 본글쓴이가 궁금한 거는 실제 메모리 할당을 어떻게 하느냐일 거다. 이게 랭귀지 스펙에 규정돼 있지는 않을 거다. 컴파일러 구현의 문제이기 떄문에. 통상의 컴파일러는 b의 메모리를 if문 {}에 들어 갈때 할당하는 게 아니라 main()함수 들어 가서 스택프레임 초기화할 때 한다. 함수에서 사용하는 로컬변수 전체 메모리를 함수 진입시에 할당 하게되는 거지.

    12.13 04:48:41
    • ㅇㅇ(123.109)

      정정: main()함수 --> 함수

      12.13 05:27:36
  • ㅇㅇ(123.109)

    즉, if문{}에 들어가기전에 이미 그 메모리는 할당돼 있는 것이지. 따라서 if문 {}에 들어 갈때 메모리 할당으로 인한 성능상의 문제는 전혀 없다. 이건 스택을 사용하지 않도록 최적화가 되면 해당되지 않는다. 즉, 최적화되더라도 메모리를 반드시 사용하는 경우에만 해당. 그리고 서로 포함하지 않는 {}이 여러개 인경우 최적화되면 한 {}에서 쓴 메모리를 재사용한다.

    12.13 04:58:19
  • ㅇㅇ(123.109)

    C++의 경우에도 마찬가지 인데 [컨|디]스트럭터 호출되는 거만 다르다. 즉 함수에 진입하면서 할당돼 있는 메모리에 if문 {} 진입/탈출할때 컨(디)스터럭터를 호출하는 거지. 컨(디)스트럭터가 언제 호출되느냐를 위에 codesafer처럼 코드를 작성해서 본다고, 그 콜에 인자로 넘어오는 메모리가 언데 할당되는 지는 알 수가 없다. 그냥 뻘짓거리지.

    12.13 05:16:01
  • ㅇㅇ(123.109)

    재귀함수 꼴을 봐야 해결방법이 감이온다는 건 뭔말인지, 이것도 헛소리고. 코드를 짜서 확인한다고 해도 저따위로 하는게 아니다. 전혀 알지도 못하는 것에 대해 또 헛소리를 다양하게도 하는군.

    12.13 05:30:13
1

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 날짜 조회 추천
설문 2018년 가장 기억에 남는 이슈는? 운영자 18/12/10 - -
공지 프로그래밍 갤러리 FAQ(자주 하는 질문) 읽어주세요.... 흐극흐극 [85] dlbo갤로그로 이동합니다. 12/01/31 70671 315
공지 프로그래밍과 관련된 사진과 내용이 있어야 합니다. [371] 운영자 05/06/21 681936 17
949593 하 이제 ㄹㅇ마지막이다 개발자노무현갤로그로 이동합니다. 12/13 17 0
949592 스크립트언어 메모이제이션 테스트 [17] aaa(125.186) 12/13 47 0
949591 let 키워드 무슨 뜻임? [8] ㅇㅇ(110.70) 12/13 50 0
949590 이게 말이 되누... 미치겟다... [10] aaa(125.186) 12/13 53 0
949589 노무명작이자너 개발자노무현갤로그로 이동합니다. 12/13 19 0
949588 런칭시간 연장합니다 개발자노무현갤로그로 이동합니다. 12/13 19 0
949587 요즘 서울 월세 왜이리 비싸냐 ??? ㅇㅇ(222.110) 12/13 19 0
949586 c# 잘하는 사람 좀 도와줘ㅓ [2] ㅇㅇ(114.23) 12/13 17 0
949584 합병정렬 어떰? [3] 딩코딩코(112.160) 12/13 32 0
949583 안뇽하세요 여고생 프갤러에용~ [1] Scala갤로그로 이동합니다. 12/13 35 0
949582 저어도 여기계신 몇몇실력자분들처럼 잘하고시픈고시와요... CreeJee(유동근)갤로그로 이동합니다. 12/13 22 0
949581 JLPT N1에 관련학과 전공인데 ㅇㅇ(121.125) 12/13 20 0
949580 VS 2019는 별로 바뀐게 없는거같네 TO갤로그로 이동합니다. 12/13 21 0
949579 요즘 4k 8k 뽕에 빠짐 급진적자살(211.244) 12/13 27 0
949578 코오오딩이 잘 하고 싶어요 [2] 말랑말망갤로그로 이동합니다. 12/13 30 0
949577 와 시발 유투브 8k도 지원하네 ㅋㅋㅋㅋ [1] 급진적자살(211.244) 12/13 35 0
949576 프갤 뒤졋노 ㅇㅇ(59.24) 12/13 32 0
949575 이과 반수생 41232 [1] 쩜메이야(173.63) 12/13 24 0
949574 님들 java jsp spring이제 지는 해임? [7] 19191(58.76) 12/13 81 0
949573 국비(게임) 재수강 하려는데 조언좀 해주라 [3] ㅇ1ㅇ(124.63) 12/13 58 1
949572 hello java ㅇㅅ(223.62) 12/13 18 0
949571 니들 OS 공부하면 어디까지하냐 ㅇㅇ(59.24) 12/13 27 0
949570 공기업이 그렇게 철밥통이냐? 쩜메이야(173.63) 12/13 22 0
949569 디시콘 이거 쓰셈 [2] 응없어갤로그로 이동합니다. 12/13 37 0
949568 알람 설정하고 잘께요 만남의광장갤로그로 이동합니다. 12/13 15 0
949567 밑에 씨언어 봐봐 [6] ㅇㅇ갤로그로 이동합니다. 12/13 98 0
949566 진짜 구글 포토 같은 거 만든 사람은 연봉 몇 억대겠지 [4] 급진적자살(211.244) 12/13 68 0
949565 크리스마스때 별찍기 대회하자 [3] ㅇㅇ(222.112) 12/13 42 0
949564 C에서 modify operator 질문이요(C 초보에요) [36] ㅇㄹㄴㅇㄹㄴ(61.84) 12/13 124 0
949563 칭구덜 크리스마스에도 코딩할거지? [3] 안드의노예(223.222) 12/13 47 0
949562 페스나 헤븐즈 필이 제일 재밋는데 몬소리냐 [2] ㅁㄴㅇㄹ(223.33) 12/13 21 0
949561 삼촌이 바보는 아직도 달팽이 코드 가지고 사기치고 다니냐? [2] ㅇㅇ(123.109) 12/13 59 2
949560 공모전은 원래 약파는거냐? [1] 학식(119.149) 12/13 33 1
c++ 고수님들 질문 하나만 [22] aaa(125.186) 12/13 101 0
949558 이런 영화같은 해커 되려면 뭐배워야 하냐 String(174.225) 12/13 43 0
949557 프갤 윽수 많이 바꼈네 [1] 안드의노예(223.222) 12/13 43 0
949556 학교 실습실에서 누가 채굴하던데 [1] ㅇㅇ갤로그로 이동합니다. 12/13 77 0
949554 intellij 양아치새끼들 자바코드를 자꾸 코틀린으로 변환해서 보여주노 [8] 매미노갤로그로 이동합니다. 12/13 48 1
949553 아.. 러스트로 테트리스만들기 생각보다 막히는데 정상이냐 [2] ananyn갤로그로 이동합니다. 12/13 43 0
949552 프갤에 여갤러 많음 [5] ananyn갤로그로 이동합니다. 12/13 92 0
949551 아드디어다만들었다 시벌 [2] 개발자노무현갤로그로 이동합니다. 12/13 51 0
949550 애미 씨발 러스트 getchar 어케하냐 [3] ananyn갤로그로 이동합니다. 12/13 40 0
949549 낮잠자서 잠이안온다 落花流水갤로그로 이동합니다. 12/13 17 0
949548 페스나 헤븐즈필인가 그거 잠깐 봣는데 [5] 급진적자살(211.244) 12/13 44 0
949547 틸다 스윈턴의 말 [3] codesafer갤로그로 이동합니다. 12/13 66 0
949546 여갤러분들에게 사죄합니다 [4] 아이이로갤로그로 이동합니다. 12/13 70 0
949545 자극적인 일애니 말구 우리 ㅇㅇ갤로그로 이동합니다. 12/13 35 0
949544 아 OpenGL 조명설정하는거 어렵네.. ㅇㅇ(125.184) 12/13 21 0
갤러리 내부 검색
전체게시물 정렬 옵션

오른쪽 컨텐츠 영역

EDNPlus