ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메모리 구조관련(미해결..)
    쥬신게임아카데미/궁금했던것 2015. 12. 29. 16:46

     

    보통 Heap의 경우는 하위 주소에서 상위 주소쪽으로 변수가 채워지며,

    Stack의 경우는 상위 주소에서 하위 주소쪽으로 변수가 채워진다.

    이는 프로그램 도중 Stack이 얼마나 필요할지 알 수 없으므로 Stack은 거꾸로 채워나간다

    상위 메모리 주소 0xffff 하위 메모리 주소 0x0000

     

    stack의 지역변수는 사용하고 소멸하므로 데이터 용량의 불확실성을 가지므로 밑에서부터 채워 올리고 heap은 위에서 부터 채워 내려진다. 용량의 불확실성은 컴파일러가 알아서 메모리영역을 선택(랜덤적)

    -stack영역에서의 주소값은 시작주소는 밑에서부터(먼저선언된 순서) 그다음 주소는 순서대로 정해진다.

    HEAP overflow-heap이 위에서부터 주소값을 채워져 내려오다가 stack영역을 침범하는 경우.

    STACK overflow-stack영역이 heap을 침범.

     

    위에 두개 이야기가 틀리다.? 아니네..밑에 그림은 높은 번지가 아래에...헐..

    까먹기 전에 정리를 하자면..위에 글에서

     

    보통 Heap의 경우는 하위 주소에서 상위 주소쪽으로 변수가 채워지며,

    Stack의 경우는 상위 주소에서 하위 주소쪽으로 변수가 채워진다.

    이 이야기는 실제 변수에 부여되는 주소를 이야기한다.

    int형 변수(스택)과 int* 형 변수(포인터, 힙)을 봤을때...

    int형 스택 주소는 위에서 아래로 채워지고..int* 형의 경우 하위에서 위로 채워진다.

     

    변수의 주소다 변수...

    아래 글은 뭐냐면..힙의 공간 힙의 주소를 이야기하는건데...

    힙의 공간은 다른개념임..힙의 주소자체는 다른개념..

    소스에서 ptr[0]이나 ptr[1]을 해보면 힙에 할당된 주소가 일반 스택의 주소보다 상위에 있다는걸 알 수 있다..그걸 나타냄..(ptr변수 주소가 아니다..) 근데 그 순서도 아래에서 위로 올라감...

     

    어쩄든.. 항상 스택 보다 포인터변수는 아래주소를 갖는 변수로 생성된다.

    중간에 새로운 스택 변수가 있으면 스택변수보다 아래에 힙주소가 생성된다..

     

    그리고 위의 소스처럼 연속적이면 연속적으로 스택보다 작은주소에서 점점 올라오는데..

    단일변수로 하나씩 하나씩 선언하면..(int* ptr1 *ptr2 이렇게..)

    스택보다 낮은 주소이긴한데 그 값은 랜덤...?

     

    연속적이면 그 총 값을 크기로해서 스택보다 아래 주소에서 아래에서 위로 올라오는거고...(한번에 잡는 개념??)

    단일 변수의 경우 연속적이지 않으니까 그냥 딱 스택 아래의 주소로 생성..

    '쥬신게임아카데미 > 궁금했던것' 카테고리의 다른 글

    정리  (0) 2016.01.16
    싱글싱글턴  (0) 2016.01.06
    메모리값 관련.의미..  (0) 2015.12.29
    소수점을 정수로 캐스팅 할때  (0) 2015.11.26
    전방선언과 헤더파일 포함할때..  (1) 2015.11.24
Designed by Tistory.