2011-09-02 4 views
1

프로그램에서 메모리 사용을 추적하려고하는데 문자열 데이터 배열에 사용 된 총 메모리를 알아야합니다.CFStringRef/CFMutableArrayRef에서 사용하는 바이트 수를 계산하십시오.

내 문자열은 CFStringRef로 표시되고 내 배열은 CFMutableArrayRef입니다.

문자열에서 CFStringGetLength()를 호출하여 문자열의 UTF16 코드 쌍 수를 얻을 수 있지만 Apple String Storage 가이드는 문자열을 더 압축 된 형식 [1]에 저장할 수 있다고 말합니다. UTF16이 2 바이트라고 가정하면 이는 보수적 인 상한선을 제공 할 것입니다. 이는 좋은 시작입니다.

가변 배열의 경우 저장 용량이 sizeof (void *) 곱하기 2의 다음 제곱으로 늘린 길이라고 가정 할 수 있습니다.

크기를 계산하는 더 좋은 방법이 있습니까? CFType에서 파생 된 객체에 할당 된 바이트를 가져 오는 함수가 있습니까?

내가 사용하고있는 실제 CFAllocator에 대한 모든 호출을 프록시하지만 할당의 델타를 기록하는 CFAllocator를 작성할 계획입니다.

[1] http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFStrings/Articles/StringStorage.html#//apple_ref/doc/uid/20001179-CJBEJBHH

+0

힌트 :'CFStringGetMaximumSizeForEncoding()'을 사용하여 다른 인코딩의 크기를 계산할 수 있습니다. 예제 사용법 : 'len = CFStringGetMaximumSizeForEncoding (CFStringGetLength (tmp), kCFStringEncodingUTF8); ' – Maciej

답변

0

당신은 각 개체에 대한 할당의 크기를 얻을 수 malloc_size()을 (http://www.manpagez.com/man/3/malloc_size/)를 사용하여 시도 할 수 있습니다.

+0

좋은 생각입니다. 아쉽게도 CFType 객체를 malloc으로 할당 할 필요가 없기 때문에 모든 경우에 작동하지 않습니다. 내 라이브러리는 CFAllocatorRef를 입력으로 받아들이고 모든 입력은이 할당자를 통과합니다. 누군가 malloc 위에 풀 기반의 할당자를 구현할 수 있고 malloc_size는 실패 할 것이다. –