디시인사이드 갤러리

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

갤러리 본문 영역

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

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

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


예를 들어


int main()

{

int a = 1;

if(a)

{

int b =2;

a += b;

}

return 0;

}


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

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

추천 비추천

0

고정닉 0

0

댓글 영역

전체 리플 23
등록순정렬 기준선택
  • 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:38:17
  • ㅇㅇ(211.34)

    어셈블리 공부를 햇어야지

    12.13 07:23:26
1

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 날짜 조회 추천
설문 2018년 가장 기억에 남는 이슈는? 운영자 18/12/10 - -
공지 프로그래밍 갤러리 FAQ(자주 하는 질문) 읽어주세요.... 흐극흐극 [85] dlbo갤로그로 이동합니다. 12/01/31 70760 315
공지 프로그래밍과 관련된 사진과 내용이 있어야 합니다. [371] 운영자 05/06/21 681989 17
952684 근데 서구권 미국, 유럽 애들 중등교육은 부실함 [3] ㅇㄷㅎ(174.225) 12/16 13 0
952683 어렸을땐 유튜버 롤선생처럼 왜소하고 귀여운스타일이 멋져보였는데 개발자노무현갤로그로 이동합니다. 12/16 16 0
952682 인싸놀이 마치고 집에도착 [3] 네이노옴갤로그로 이동합니다. 12/16 25 0
952681 코세야 오늘도 주접을 떨었구나. [1] ㅇㅇ(123.109) 12/16 58 1
952678 ㅂㅁㄱ [3] ㅇㅇ(223.38) 12/16 52 1
952677 니가 그러는 순간 여기에 니짤 반사되서 똑같이 실습갤이다 [6] ㅇㅇ(175.223) 12/16 38 0
952676 그래서 결국 이헤갤 진짜 의료 실습갤로 만들려고 하냐 W10updsrv7(175.223) 12/16 26 0
952675 굳이 약한 구석 건드리고 싶지 않다 ㅇㅇ(223.62) 12/16 24 0
952674 프갤이 분탕치기 좋은건 사실인게 중구난장식이라 방어가 하나도 안됨 ㅇㅇ(223.62) 12/16 27 0
952673 ㅂㅂㅇ ㅇㅇ(223.33) 12/16 10 0
952672 아 빨리 딥러닝 알려 달라고 [6] ㅇㅇ(175.223) 12/16 37 0
952670 딥러닝이뭐냐면 sh(24.244) 12/16 31 0
952669 타갤 사람 말하나. ㅌ 닉 한명 암 ㅇㅇ(223.38) 12/16 11 0
952668 딥러닝이 뭐냐고 [1] ㅇㅇ(175.223) 12/16 20 0
952667 몰갤이 누군데. ㅅㅂ아 ㅇㅇ(223.38) 12/16 11 0
952666 몰갤이 누구냐? ㅇㅇ(175.223) 12/16 11 0
952665 ㅇㅇ(175.223) 12/16 8 0
952664 몰갤아 여기서 쳐 보이지 말라고 했지 [3] W10updsrv7(175.223) 12/16 27 0
952662 ㅇㅇ(175.223) 12/16 8 0
952661 ㅇㅇ(175.223) 12/16 11 0
952660 딥러닝이 뭐냐고 ㅡㅡ ㅇㅇ(175.223) 12/16 12 0
952659 이헤갤러들도 사실 코딩 배워야함 [1] ㅇㅇ(59.24) 12/16 26 0
952658 서버를 하는 진짜 이유 ㅇㅇ(124.57) 12/16 17 0
952656 딥러닝이뭐냐?딥러닝이뭐야? ㅇㅇ(175.223) 12/16 10 0
952655 "그새끼" 타갤에 닥눈삼 안하고 개판치려다가 감. 왠만함 욕안함 ㅇㅇ(223.38) 12/16 20 0
952654 이헤갤에서 자칭 여기 모갤러 어그로 안되니. 여기로 넘어옴 참고하3 ㅇㅇ(223.38) 12/16 20 0
952653 페이스북 쓴소리 아재노 개발자도 아니노? 매미노갤로그로 이동합니다. 12/16 10 0
952652 노래 들으면서 코딩 [2] ㅇㅇ(121.133) 12/16 31 0
952651 딥러닝이 뭐냐? ㅇㅇ(119.196) 12/16 18 0
952650 이헤갤에서 왔습니다. [3] ㅇㅇ(211.243) 12/16 72 0
952649 약자들은 건드리지 않는다. 내 신조임 [1] ㅇㅇ(223.62) 12/16 27 0
952648 근데 자스는 브라우저에서 어떤 대단한 일을 하냐 [3] ㄹㅇㄴㅁ(123.212) 12/16 31 0
952647 카페에 맥북쓰는사람 왜케 많음?? [6] 학식(119.149) 12/16 55 0
952646 안드로이드 스튜디오 서비스 스레드 질문 [2] ㅇㅇ(58.231) 12/16 35 0
952645 아 시발 오늘도 공부 하나도 안했네 [1] 급진적자살(211.244) 12/16 30 0
952644 비주얼 스튜디오 디버그할때 콘솔창 지멋대로 꺼지는데 나만이럼? [1] aaa(125.186) 12/16 18 0
952643 그램에 우분투 깔아쓸수있냐? [5] 학식(119.149) 12/16 42 0
952642 스타크래프트비슷한 배틀시뮬겜만들고싶다 [1] 개발자노무현갤로그로 이동합니다. 12/16 26 0
952641 이거 보면 왜 Tor 유저들 잡히는지 알거임 ㅇㅇ(59.24) 12/16 44 0
952640 하고싶은게 너무 많아 골라줘 [8] 메구갤로그로 이동합니다. 12/16 69 0
952639 겜개발아이디어좀 [2] 개발자노무현갤로그로 이동합니다. 12/16 47 0
952638 이번겨울은 [1] sh(174.0) 12/16 32 0
952637 구글 DB 서버 SSD 쓰냐? [4] ㅇㅇ(117.111) 12/16 53 0
952636 멀티코어가 멀티프로세서보다 왜 덜 복잡하다는거임 [16] 얽뚫빵갤로그로 이동합니다. 12/16 79 0
952635 이과 반수생 41231 부산대치대 모의지원 해봤는데 [2] ㅇㄷㅎ(108.35) 12/16 55 0
952634 ****프갤 살려주세요..**** [5] ㅇㅇ(175.223) 12/16 63 0
952633 스크래치가 머임 [2] ㅇㅇ(121.163) 12/16 30 0
952632 게임개발 1년차 총수익 [3] 개발자노무현갤로그로 이동합니다. 12/16 109 0
갤러리 내부 검색
전체게시물 정렬 옵션

오른쪽 컨텐츠 영역

EDNPlus