Утечка памяти в si_user_byuid/getpwuid, происходящая из CPSharedResourcesDirectory в iOS
Я нахожусь на этапе оптимизации / анализа продукта, который появится в продаже через пару недель, и я удивлен, обнаружив некоторые утечки, которые не (как мне кажется) происходят из моего кода. Одним из них является утечка strdup/malloc, присутствующая в iOS 5.1.1, для которой я ничего не могу сделать, кроме как ждать обновления. Однако сегодня я обнаружил новый, и в настоящее время я пытаюсь определить, где и как он протекает. Инструменты отчетов:
Bytes Used # Leaks Symbol Name
16 Bytes 100.0% 1 start
16 Bytes 100.0% 1 main
16 Bytes 100.0% 1 UIApplicationMain
16 Bytes 100.0% 1 -[UIApplication _run]
16 Bytes 100.0% 1 _UIAccessibilityInitialize
16 Bytes 100.0% 1 -[UIApplication(UIKitApplicationAccessibility) _accessibilityInit]
16 Bytes 100.0% 1 -[UIApplication(UIKitApplicationAccessibility) _updateAccessibilitySettingsLoader]
16 Bytes 100.0% 1 _AXSAccessibilityEnabled
16 Bytes 100.0% 1 _getBooleanPreference
16 Bytes 100.0% 1 CPCopySharedResourcesPreferencesDomainForDomain
16 Bytes 100.0% 1 CPSharedResourcesDirectory
16 Bytes 100.0% 1 getpwuid
16 Bytes 100.0% 1 si_user_byuid
16 Bytes 100.0% 1 search_item_bynumber
16 Bytes 100.0% 1 si_user_byuid
16 Bytes 100.0% 1 _fsi_get_user
16 Bytes 100.0% 1 0x119048
16 Bytes 100.0% 1 0x1180e4
16 Bytes 100.0% 1 malloc
Из небольшой копки я узнал, что getpwuid - это функция unix/linux, импортированная <pwd.h>
, Двойной щелчок по si_user_byuid
в инструментах появляется знак "Нет источника" и двойной щелчок на getpwuid
приходит со сборкой arm7 (о которой я извиняюсь, что не знаком с):
+0x0 push {r4, r5, r7, lr}
+0x2 add r7, sp, #8
+0x4 movw.w r5, #18506 ; 0x484a
+0x8 movt.w r5, #3265 ; 0xcc1
+0xc mov r4, r0
+0xe add r5, r15
+0x10 ldr r0, [r5]
+0x12 cbnz getpwuid
+0x14 movw.w r0, #47748 ; 0xba84
+0x18 movt.w r0, #1 ; 0x1
+0x1c add r0, r15
+0x1e bl.w getpwuid
+0x22 str r0, [r5]
+0x24 mov r1, r4
+0x26 bl.w getpwuid
+0x2a mov r4, r0
+0x2c movs r0, #201 ; 0xc9
+0x2e mov r1, r4
+0x30 bl.w getpwuid
+0x34 movs r0, #0 ; 0x0
+0x36 cmp r4, #0 ; 0x0
+0x38 it ne
+0x3a addne.w r0, r4, #28 ; 0x1c
+0x3e pop {r4, r5, r7, pc}
Так:
- Кто-нибудь видел это раньше?
- Может ли это быть ложно-положительным?
- Может ли это быть ограничено iOS 5.1.1?
1 ответ
Вот источник всего этого, начиная с getpwuid
, На первый взгляд кажется, что происходит какое-то кэширование, поэтому я бы не стал сильно волноваться, если бы не большая утечка.