'메모리 스톰프'란?
'기억을 짓밟는다'는 블로그 투고를 우연히 발견했습니다.
메모리(관리 코드 세계에서 태어나면 들어본 적도 없는 것)를 쉽게 제거할 수 있는 C++ 프로그램입니다.
그리고 사실 나는 그것에 대해 들어본 적이 없어!
그럼 이건 뭐야? 기억을 뭉개고 뭉개고무는 기억?언제 일어납니까?
다른 코드 조각이 충돌하는 방식으로 메모리를 사용하고 있다는 것을 깨닫지 못한 채 코드 조각이 메모리를 조작할 때 메모리는 "무디게" 됩니다.메모리를 스탬프 하는 일반적인 방법은 몇 가지 있습니다.
하나는 예를 들어 100바이트의 메모리를 할당한 다음 100번째 주소 뒤에 무언가를 저장하는 것입니다.이 메모리는 완전히 다른 것을 보관하기 위해 사용될 수 있습니다.이것은 특히 디버깅이 어렵습니다.왜냐하면 이 문제는 무언가가 밟힌 희생자에게 접근하려고 할 때 나타나며, 밟힌 코드는 전혀 관련이 없을 수 있기 때문입니다.
다른 하나는 메모리를 해방한 후에 메모리에 액세스 하고 있다.메모리는 다른 오브젝트에 할당할 수 있습니다.이 경우에도 문제를 나타내는 코드는 같은 주소를 취득한 새로 할당된 개체와 관련된 것으로 문제의 원인이 된 코드와는 무관할 수 있습니다.
다른 답변은 기본적으로 맞지만 예를 들어 보겠습니다.
int a[10], i;
for (i = 0; i < 11 ; i++)
a[i] = 0;
int i, a[10];
for (i = 0; i < 11 ; i++)
a[i] = 0;
이러한 샘플은 정의되지 않은 동작이기 때문에 무한 루프가 될 수 있습니다(또는 발생하지 않을 수도 있습니다).
매우 가능성이 높은 변수i
메모리내의 는, 어레이 직후에 보존됩니다.액세스a[10]
실제로 접속할 수 있다i
즉, 루프 카운터를 리셋 할 수 있습니다.
나는 그것이 기억의 "구르기"를 보여주는 좋은 예라고 생각한다.
대부분의 경우 버퍼 오버런입니다.예를 들어 다음과 같은 코드가 있습니다.
char buffer[8];
buffer[8] = 'a';
그 후 기억 속에 어떤 일이 일어나도 ' 밟아 뭉개버린다'buffer
. 일반적으로 '구르기'는 무의식적으로 기억을 쓰는 것을 말한다.
언급URL : https://stackoverflow.com/questions/13669329/what-is-a-memory-stomp
'programing' 카테고리의 다른 글
HashSet/HashMap에 중복된 값을 추가하면 이전 값이 대체됩니까? (0) | 2023.01.30 |
---|---|
SQL 표의 두 기간을 비교하여 판매 결과를 얻습니다. (0) | 2023.01.30 |
개체를 포함하는 어레이를 루프하여 해당 속성에 액세스하는 방법 (0) | 2023.01.30 |
Java에서 목록을 "인스턴스화"하고 있습니까? (0) | 2023.01.20 |
MariaDB 문자 인코딩 (0) | 2023.01.20 |