2011-01-03 9 views
10

이미지 이미징에는 바이트가 들어있는 메모리가 있습니다. [++++++ ----- ++++ - ++ - +++++++++ -------- +++ ++]조각화를 계산하는 방법은 무엇입니까?

"+"는 할당 된 것을 의미하고 "-"는 무료임을 의미합니다.

나는 howto의 분열률을 계산합니다.

배경 : 저는 정적 메모리가있는 임베디드 장치를위한 아주 작은 동적 메모리 관리를 구현하고 있습니다. 내 목표는 소량의 데이터를 저장하는 데 사용할 수있는 무언가를 갖는 것입니다. 주로 무선 연결을 통해 들어오는 패킷 ~ 각각 128 바이트.

도움 주셔서 감사합니다.

+0

것이다. 할당 블록이 얼마나 큰지에 따라 다릅니다. – Bigbohne

+0

모든 블록의 크기가 거의 같고 메모리가 정적이고 시스템이 너무 작아서 메모리 액세스를위한 캐싱을 사용할 수없는 경우 조각화가 중요하지 않을 수 있습니다. 어떤 슬롯이 자유롭고 어떤 슬롯이 아닌지 추적해야합니다. 그러나 접근을 뛰어 다니면 많은 비용이 들지 않습니다. 이는 건너 뛸 때 헤드를 움직여야하는 전자 기계식 디스크 드라이브 또는 느린 DRAM과 건너 뛰기가 많은 캐시 미스가 발생하는 시스템의 경우와는 대조적입니다. –

답변

6

, 그것은 당신이 "분열의 비율"무슨 뜻인지 정확히 따라 달라집니다 -하지만 당신이 사용할 수있는 하나 개의 간단한 공식은 다음과 같습니다

(free - freemax) 
---------------- x 100% (or 100% for free=0) 
    free 

free  = total number of bytes free 
freemax = size of largest free block 

그런 식으로, 모든 메모리가 하나 개의 큰 블록에있는 경우, 분열은 0 %이며, 메모리는 모든 작은 블록 수백들로 새겨 져 있다면, 그것은 100 %에 근접 할 것이다.

+0

나는 이것을 좋아한다. 평가해야 :) – Bigbohne

6

현재 메모리 레이아웃에 맞출 수있는 128 바이트 패킷 수를 계산하십시오. 하자 수 번호.

메모리 레이아웃에 넣을 수있는 128 바이트 패킷 수를 계산합니다. 현재 레이아웃과 동일한 바이트 수가 할당되지만 구멍이없는 것입니다 (즉, 모든 +를 예를 들어 왼쪽으로 이동). 해당 번호의 N.하자

귀하의 "분할 비율"이 될 것입니다 알파 = N/N

3

당신의 할당이 모두 거의 같은 크기, 단지 TOTAL/MAXSIZE 조각으로 당신의 기억을 분할 각 MAXSIZE 바이트로 구성하는 경우 . 그런 다음 단편화는 부적합합니다.

은 "분열"에 대한 매직 넘버가없는, 일반적으로 귀하의 질문에 대답합니다. 조각난 메모리가 어떻게 반영되는지를 다른 기능의 장점으로 평가해야합니다. 여기에 하나 내가 크기 n의 함수로, 추천 할 것입니다 다음 log는 "0 무한대"규모에 물건을 매핑하는 단지가 있다는 것을

fragmentation(n) = -log(n * number_of_free_slots_of_size_n/total_bytes_free) 

참고; 당신은 실제로 실천에 그 평가해서는 안된다. 대신 간단하게 평가할 수 있습니다 1.0

freespace_quality(n) = n * number_of_free_slots_of_size_n/total_bytes_free 

이 아주 나쁜 (하나를 할당 할 수 없습니다)되는 및 0.0 이상 (크기 n 개체의 가능한 최대 수를 할당 할 수)있는. R. 적혀

0

당신이 있다면 [++++++ ----- ++++++ - + + + + + + + + -------- +++++] 당신은 당신은 평균 연속 블록 크기를 전체 블록/연속 블록의 개수를 측정 할 수 여유 공간 (또는 다른 할당)의 분열을 측정하고 싶었다.

이 경우는 아 ... 난 볼 4/(5 + 2 + 1 + 8)/4 = 4

관련 문제