거의 3 초대 코드를 입력하는 방법에 고급 플랫폼 82,333,323 적용

10771077 네트워크 hct97 포인트 C0M : 바이 아 연의 57-56-83-12 코드를 검색

오늘의 게시물의 공식 시작하기 전에 코드의 조각을보고, 코드 사고의 경우가있을 수 있습니다 :

코드를 복사
) (대표 값 int 
{ 
        INT J, B [10]; 
          (; J <= 10, J = 1 ++ j)에 대해 { 
                  2 [J] = 0; 
          } 
}
코드를 복사

이 코드를 읽은 후, 그들은 더 구덩이가없는 느낌이 경우이 코드는, 그것은 오 B의 배열 범위로 이어질 것입니다 (1)에서 (10)와 b [10]에 노트 J 범위를 취할 수도 있습니다. 아직 결과를 고려? 그것의 일부 메모리 지식에서 살펴 보자.

지역 변수, 전역 변수 (정적 및 전역 변수), 스택 변수 : C / C의 세 개의 변수 ++ 고등학교에서 우리

로컬 변수 등의 메모리 할당 된 메모리 섹션에서 통상 컴파일러 스택 공간의 프로그래머 변수를 정의 할 경우 :

INT B [10], J;

같은 메모리 정적 메모리 컴파일러에 의해 할당 된 전역 변수 공간 :

INT X, Y; // 글로벌

() {int로 메인

  정적 INT의 m, n은 // 정적

}

등의 malloc이나 힙 메모리의 새로운인가 기간을 이용하여 프로그래머 스택 변수 :

난 새로운 지능 = * * A = INT 새로운 INT [10]; // 동적 메모리 할당

 

 

메모리가 제공하는 가시 컴파일러는 다른 섹션의 권리 프로그래머 액세스 메모리로 나누어 논리적으로, 아이 과정에서 배출되는 프로그래머의 크기, 메모리 부족이있을 것이다 일단 각 세그먼트의 크기는 자신의 공간이 이러한 전형적인 스택 오버플로 오류, 

그들이 다시 배열하는 방법의 메모리에, 나는 같은 변수 영역에 여러 가지 변수를 정의 할 때, 문제에 대해 생각 후 저장 변수를 알아?

예를 들어, I는 두 지역 변수를 정의

A, B에서 INT;

그래서 결국 최초의 컴파일러는, 또는 B의 할당 주소로 할당 주소로? 후 결국 주소 위의 B 주소 또는 A B 주소 위의 주소는, 할당 주소 (이 또한 생각하는 데 사용? 물론 처음 할당 친구를 정의)? 즉지도가 정확 두지도 아래?

단지이 두 주소가보기에 인쇄되는 답을 알고 싶어요. 샤오 총통은 독자가 자신을 인쇄하는 것이 좋습니다, 여기에 인쇄되지 않습니다.

결과는 정확 남아 B의 어드레스보다 높은 어드레스를 출력한다.

그러나 여기에서 참고 A, B, 로컬 변수, 즉 변수에 저장되어있는 상기 스택 영역 우리가 정의하는 스택 영역의 변수 것으로 결과에 기초하여, 변수는 초기 높은 어드레스 영역에 할당 정의 정의 후의 변수는 하위 어드레스에 할당 영역 (왼쪽) .

즉, 힙과 정적 메모리 인 경우?

정적 A, B에서 INT;

INT * A = INT 새로운 * B = INT 새로운;

 그것에 대해 주소를 직접 인쇄 할 수 있습니다.

발견 힙 및 정적 메모리의 스택 영역 반대로, 힙 영역 변수 / 정적 메모리이다 로우에 할당 된 제 1 어드레스 영역이 높은 어드레스 영역 할당 (오른쪽)에 정의 된 변수 정의 변수.

결론적 인 높은 증착 낮은 저 입금 전역 / 정적 / 낮은 스택 변수와 로컬 변수.

(높은 메모리 (메모리 부족)는 어드레스가 높은 (낮은) 동시 변수 정의하는 복수의 하위 주소 (높음) 주소를 점유 방법을 설명)

(저 얼마나 이해 : 메모리 셀의 각 변수가 저장되는 높은 비율 유닛 어드레스 바이트 로우에서 변수의 바이트 주소를 할당 / 데이터 읽기)

코드 위를보고 지금 돌아 :

INT J, B [10];

두 지역 변수, 그것으로 높은 낮은 보증금을 기억 하는가? DIY 그것의 분포에 대한 자신의 기억을 그림.

 

 

삭제 메모리 할당 및 B J 배열 코드를 살펴 후 (어레이 위의 그림은 배열 B 실제로 잊지 시간에 걸쳐 변화 드로잉)

코드를 복사
) (대표 값 int 
{ 
        INT J, B [10]; 
          (; J <= 10, J = 1 ++ j)에 대해 { 
                  2 [J] = 0; 
          } 
}
코드를 복사

(10)의 J 값, B [10] 배열 범위 원인이 결과가 국경의 B [10]의 결과 인 경우에는 저장 공간이 높은 어드레스 INT (4 바이트)를 점유하는 것, 그것이 명확 B [이고 상기 어드레스 J 10 다음 10] = 0, J = 0에 상당 [B 점유 무한 루프를 초래한다.

(인 어레이의 실제 동작하고 B 1-2 범위의 메모리 셀들이 어드레스 J 만 J 데 필요한 실제 동작은 <= 10의 조건 J에게 <= 11 J <=이되고 여기서 설명 될 것이다 여기 이론적 결과 ) 12

제 j 차례로 B [10]의 정의를 교환하는 경우 :

INT B [10], J;

그들은 아, 죽은주기를 나타 왜 자신을 설명하지 않습니다.

여기에서 우리는 그것을 사용하는 메모리 부족 글로벌 / 정적 / 저 스택 변수가 잊지 마세요, 높은 예금 저와 지역 변수에 대해 설명합니다.

우리는 J 국소 변수 및 B [10]이며, 어플리케이션 힙 메모리에서 재정의 할

INT * J = INT 새로운 * B = 새로운 INT [10];

그런 다음 트래버스 다시, 오, 무한 루프가되지 않을 것

코드를 복사
int로 주 () 
{ 
        INT * J = INT 새로운 * B = 새로운 INT [10]; 
        대 (J * = 1; J * <= 10; ++ J *) { 
                B는 [j는 *] = 0; 
        } 
     }
코드를 복사

이 경우 J에서, B는 힙에, 그리고 J B는 상대적으로 낮은 주소 만 덜 J 주소가 아닌를 차지, 높은 주소 공간을 차지 계속 방법을 경계 B의 사정에 있습니다. (사용자 정의 오, 죽음의주기에 변화를 주문) 

여기 내 테스트 코드를 부착

코드를 복사
사용법 #include <iostream> 
네임 스페이스를 사용하여 표준; 

INT X, Y; 

주 () 값 int 
{ 
        COUT << "전역 변수 : \ n '; 
        COUT << '및 X "<< << 및 X'및 Y"<< & Y << ENDL; 

        정적의 INT m, N; 
        COUT << "정적 변수 : \ n '; 
        COUT << '및 m "<< 및 m <<'및 N"<< & N << ENDL; 


        COUT << "힙 변수 : \ n '; 
        * A = INT 새로운 INT [10] * 나는 새로운 지능 =; 
        // INT I, A [10]; 
        (* I = 1 * I <= (11) * I ++) {대해 
                A [* I] = 0; 
        } 
        에 대한 (* I = 0; * 난 <= 11; 
                * I ++) { COUT << '및 A [ "<< * I <<"] "<< & A [* I] << ENDL; 
        } 
        COUT << "& I"<< I << ENDL;

        ]는 [삭제; 
        // 삭제 전; // 여기에 오류가 여기에 포인터 invaild 될 것입니다 일단 난의 공간에 대한 국경 계정에, [] 내가 공간이 릴리스에 의해 점유 한 사실이, 다음 릴리스를 삭제 인해 

        cout과 << "스택 변수 : \ N- "; 
        INT B [10], J, 
        대 (.. J = 1; J <= 11, J ++) { 
                B [J] = 0; 
        } 
        . 대 (J = 0; J <= 11] + J +) { 
                COUT << '및 B [ "J << <<"] "<< & B [J] << ENDL; 
        } 
        COUT <<"및 J "<< ENDL << & J; 

}
코드를 복사

 

추천

출처www.cnblogs.com/asdafw65/p/11825431.html