시도하는코딩
92
2019-11-08 21:24:13
6
309

c언어 메모리질문


질문이 2개가있습니다.

1.배열은 함수바깥에 있든 함수 안에 있든 정적수명을 갖는 데이터영역에 저장되는것이 맞나요? 
2.대신 선언된곳이 함수바깥이면 파일범위로 사용가능하고 함수내에 선언되면 블록범위로 사용가능한 것이 맞나요?
0
0
  • 댓글 6

  • J-Y
    86
    2019-11-09 02:49:26

    배열도 함수 안에서 선언되면 콜스택 영역에 메모리가 잡혀서 함수 종료시 메모리 해제됩니다. 

    1
  • 2nd
    215
    2019-11-09 15:52:15
    선언된 곳이 함수 바깥이면 글로벌 변수입니다. 한개의 파일이 아니라 프로젝트 전체에서 사용가능 합니다.
    0
  • 시도하는코딩
    92
    2019-11-11 08:25:23
    배열 자체는 상수로 바꾸지않는한 변수라고 보는 것이 맞나요? 배열이름은 상수 배열의 각 요소는 변수라고 알고있는데요(상수 선언시 요소도 상수가 되고) 배열은 그냥 배열인지  배열자체도 변수로 보는것인지 궁금합니다.
    0
  • 2nd
    215
    2019-11-11 17:58:06 작성 2019-11-11 17:59:40 수정됨

    배열은 값(상수)을 담는 공간을 의미합니다. 배열의 이름은 이 공간의 첫 번째 바이트를 가리키는 포인터 입니다.

    이 공간에 다양한 값을 담을 수 있고 변경이 가능하다는 의미에서 변수라는 뜻이구요.

    0
  • MJ_9999
    310
    2019-11-17 22:37:44
    malloc 혹은 new를사용해서 배열을 선언하셨다면 heap에 아니라면 스택에저장된다고 알고있습니다.
    틀린부분이있다면 알려주세요.
    0
  • 시도하는코딩
    92
    2019-11-19 08:25:21

    알아낸 바로는 배열도 함수밖에서는 정적수명(데이터영역), 함수안에서는 자동수명(스택영역)

    함수밖에서는 프로그램,파일범위, 함수안에서는 블록범위


    MJ_9999 malloc 혹은 new를 사용하게되면 heap영역(프리스토어)에 저장된다고 합니다.

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.