연속 메모리 블록이란 무엇입니까?
제목처럼 연속 메모리 블록이란 무엇입니까?
이것은 위치 1에서 위치 5까지 이어지는 5바이트의 연속 메모리 블록입니다.
메모리에서 공백 바이트(흰색) 없이 함께 있는 바이트(파란색)를 나타냅니다.
다음은 관심 있는 5바이트의 비연속 집합입니다.
위치 4와 6에 간격 바이트가 있는 세 개의 바이트 그룹(노란색)으로 분할됩니다.위치 1에서 시작하여 위치 1에서 3까지 이어지는 3바이트의 연속 블록이 있습니다.위치 5와 7에는 각각 1바이트의 블록이 두 개 더 있습니다.
위치 0에 있는 사용되지 않는 블록과 위치 7을 초과하는 후속 블록은 위치 1에서 7까지의 관심 바이트 사이에 삽입되므로 일반적으로 무시할 수 있습니다.
차지하는 주소에 공백이 없는 주소입니다.여러분은 아마 이것을 "블록"이라고 생각할 수 있고, 중간에 틈이 있는 것을 "두 블록"이라고 생각할 수 있습니다.
이 용어는 배열의 정의에서 "연속적"으로 나타납니다.즉, 요소가 불연속성이 없고 그 사이에 패딩이 없는 엔드 투 엔드로 배치됩니다(각 요소 내부에는 패딩이 있을 수 있지만 요소 사이에는 패딩이 없을 수 있음).54바이트 요소의 배열은 다음과 같습니다(바이트당 1개의 밑줄 문자, | 기호는 메모리를 나타내지 않음).
____ ____ ____ ____ ____
|____|____|____|____|____|
다음과 같이 보이지 않습니다.
____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|
그리고 다음과 같이 보이지도 않습니다.
____ ____ ____ ____ ____
|____|____|____| ... somewhere completely different ... |____|____|
모든 경우에 "모양"은 "C에 표시된 주소에 관한 한"을 의미합니다.가상 주소 공간에서는 무언가가 연속적일 수 있지만 물리적 RAM에서는 연속적일 수 없습니다.이와 관련하여 물리적 RAM 주소 공간에서는 인접할 수 있지만 물리적 RAM에서는 인접하지 않습니다.절반은 이쪽의 램 칩에 있을 수 있고, 나머지 절반은 저쪽의 램 칩에 있을 수 있습니다.하지만 C 메모리 모델은 그 어떤 것도 "볼" 수 없습니다.
다른 메모리에 의해 중단되지 않는 메모리 블록입니다.또는 보다 정확하게는 가상 주소 공간의 중단 없는 블록이 필요합니다.주소 공간을 지원하는 실제 RAM은 연속적일 필요가 없습니다.
큰 메모리 블록을 할당하는 경우 이 작업이 중요합니다.OS는 이를 연속 블록으로 제공해야 하지만 메모리가 너무 단편화되어 더 작은 조각만 사용할 수 있다면 총 사용 가능한 메모리가 요청된 공간보다 크더라도 이 메모리 할당을 충족할 수 없습니다.
64비트 앱에서는 주소 공간이 넓기 때문에 큰 문제가 되지 않습니다.그러나 32비트 프로세스에서는 힙이 너무 단편화되어(자유 블록 사이에는 여전히 자유 블록이 있음) 더 큰 할당이 실패할 수 있습니다.
메모리 블록은 단일 선형 주소 공간에서 시작 주소와 끝 주소로 정의되며 구멍이 없는 경우 정확히 연속됩니다.
메모리 할당의 맥락에서 응답하면 메모리 할당자를 호출하고 24바이트의 메모리를 요청할 때 할당되지 않은 메모리의 단일 블록을 찾을 수 있어야 합니다.
하나의 주소로 시작하는 16바이트의 메모리가 있는 경우x
주소로 시작하는 또 다른 8바이트y
할 정도로y > x + 16
또는y < x - 8
그러면 총 24바이트의 사용 가능한 공간이 있음에도 불구하고 할당자가 24바이트에 대한 사용자의 요청을 충족할 수 없습니다.
조각화를 참조하십시오.
메모리는 많은 수의 바이트 블록으로 구성됩니다.각 블록에는 고유한 주소가 있습니다.프로세스가 메모리를 요청할 때 메모리는 두 가지 방법으로 할당됩니다.
- 연속 메모리 할당
- 비연속 메모리 할당
연속 메모리 할당에서는 연속된(다른 블록 뒤에 하나씩) 블록이 할당되며, 이를 연속 메모리 블록이라고 합니다.
비연속 메모리 할당에서는 서로 다른 위치에 있는 별도의 블록이 할당됩니다.
언급URL : https://stackoverflow.com/questions/4059363/what-is-a-contiguous-memory-block
'programing' 카테고리의 다른 글
모든 컨트롤러에 대해 기본 @RestController URI 접두사를 구성하는 방법은 무엇입니까? (0) | 2023.06.19 |
---|---|
Panda DataFrame에서 빈 셀이 포함된 행을 삭제합니다. (0) | 2023.06.19 |
Azure 스토리지에서 ABFSS와 WASBS의 차이점은 무엇입니까? (0) | 2023.06.19 |
ASP.NET 5, .NET Core 및 ASP.NET Core 5의 차이점은 무엇입니까? (0) | 2023.06.19 |
형식 스크립트에서 변수 이름 가져오기 (0) | 2023.06.19 |