Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 12

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ взят с ΠΌΠΎΠ΅Π³ΠΎ Π΄Π·Π΅Π½-ΠΊΠ°Π½Π°Π»Π°.

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 12

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, я ΠΎΠ±Π΅Ρ‰Π°Π» Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ вопрос ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Ρ‚ΠΈΠΊΠ΅Ρ€ ΠΈ способы Π±ΠΎΡ€ΡŒΠ±Ρ‹ с Ρ‡Ρ€Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π² мСдиастримСрС. Но Ρ€Π΅ΡˆΠΈΠ», Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π½Π΅Π΅ ΠΎΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ вопросы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΊΡ€Π°Ρ„Ρ‚ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², связанныС с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ вопросы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΊΡ€Π°Ρ„Ρ‚ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрСли ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ пСрСмСщСния Π΄Π°Π½Π½Ρ‹Ρ… Π² мСдиастримСрС Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² Π½Π΅ΠΌ опасности. Одна ΠΈΠ· особСнностСй ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° "data flow" состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΈΠ· ΠΊΡƒΡ‡ΠΈ происходит Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Ρƒ истоков ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Π° освобоТдСниС памяти с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΡƒΡ‡Ρƒ Π΄Π΅Π»Π°ΡŽΡ‚ ΡƒΠΆΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, располоТСнныС Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡƒΡ‚ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠšΡ€ΠΎΠΌΠ΅ этого, созданиС Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ…. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, освобоТдСниС памяти выполняСт Π½Π΅ Ρ‚ΠΎΡ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Ρ‡Ρ‚ΠΎ создал Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π·Π° ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, получая Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±Π»ΠΎΠΊ, послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π» Π΅Π³ΠΎ с освобоТдСниСм памяти, Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ выставлял Π±Ρ‹ вновь созданный Π±Π»ΠΎΠΊ с Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’ этом случаС ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅ Π»Π΅Π³ΠΊΠΎ Π±Ρ‹ Ρ‚Ρ€Π°ΡΡΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ β€” Ссли Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π½ΠΈΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ входящиС Π±Π»ΠΎΠΊΠΈ Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ ошибка Π² Π½Π΅ΠΌ. Но с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния поддСрТания высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π΅Π½ β€” ΠΎΠ½ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ/освобоТдСнию памяти ΠΏΠΎΠ΄ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Π²Ρ‹Ρ…Π»ΠΎΠΏΠ°.

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ мСдиастримСра, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сообщСний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π»Π΅Π³ΠΊΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ (ΠΌΡ‹ рассказывали ΠΎ Π½ΠΈΡ… Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅). Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° сообщСния "пристСгивая" ΠΊ Π½Π΅ΠΌΡƒ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ "старого" сообщСния. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ привязанными Π΄Π²Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ выполняСтся ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ счСтчика ссылок Π² Π±Π»ΠΎΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Но Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ Π΄Π²Π° сообщСния. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ с Ρ‚Π°ΠΊΠΈΠΌ "обобщСствлСнным" Π±Π»ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ большС, Ρ‚Π°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ MS_TEE ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ сразу дСсяток Ρ‚Π°ΠΊΠΈΡ… Π»Π΅Π³ΠΊΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ, распрСдСляя ΠΈΡ… ΠΏΠΎ своим Π²Ρ‹Ρ…ΠΎΠ΄Π°ΠΌ. ΠŸΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ всСх Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅, ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° этот счСтчик ссылок Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ΡŒ нуля ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° функция освобоТдСния памяти: ms_free(). Если Π²Ρ‹Π·ΠΎΠ²Π° Π½Π΅ происходит, Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ этот кусок памяти ΡƒΠΆΠ΅ Π½Π΅ вСрнСтся Π² ΠΊΡƒΡ‡Ρƒ, Ρ‚.Π΅. ΠΎΠ½ "ΡƒΡ‚Π΅Ρ‡Π΅Ρ‚". Расплатой Π·Π° использованиС Π»Π΅Π³ΠΊΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ слуТит ΡƒΡ‚Ρ€Π°Ρ‚Π° возмоТности Π»Π΅Π³ΠΊΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ (ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π² случаС использования ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΠΉ) Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅ Π³Ρ€Π°Ρ„Π° ΡƒΡ‚Π΅ΠΊΠ°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° поиск ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² "Ρ€ΠΎΠ΄Π½Ρ‹Ρ…" Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ… Π»Π΅ΠΆΠΈΡ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… мСдиастримСра, Ρ‚ΠΎ скорСС всСго Π²Π°ΠΌ Π½Π΅ придСтся ΠΈΡ… ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Но Π²ΠΎΡ‚ с вашим ΠΊΡ€Π°Ρ„Ρ‚ΠΎΠ²Ρ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ β€” Π²Ρ‹ сами ΠΊΡƒΠ·Π½Π΅Ρ‡ΠΈΠΊ своСго ΡΡ‡Π°ΡΡ‚ΡŒΡ ΠΈ ΠΎΡ‚ вашСй аккуратности Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ врСмя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Ρ‚Π΅ Π² поисках ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ Π² вашСм ΠΊΠΎΠ΄Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ вашС врСмя мытарств с ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, ΡƒΡ‚Π΅Ρ‡ΠΊΠ° проявит сСбя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ систСмС, Π³Π΄Π΅ количСство "ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹Ρ…" ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ, Π° врСмя Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ.

Как проявляСт сСбя ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти?

Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ top Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π°Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Π’Π½Π΅ΡˆΠ½Π΅Π΅ проявлСниС Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ систСма станСт Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΊΠΈ, ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ экран. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ расти систСмный Π»ΠΎΠ³, съСдая мСсто Π½Π° ТСстком дискС. ΠŸΡ€ΠΈ этом вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π½Π΅Ρ‚ вСсти сСбя странно, Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ Ρ‚.Π΄.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ возникновСния ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ памяти (Π΄Π°Π»Π΅Π΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Valgrind (Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ Π½Π΅ΠΌ) ΠΈΠ»ΠΈ встроСнный Π² компилятор gcc MemorySanitizer ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ½ΠΎΠ΅. Если Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° происходит Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π³Ρ€Π°Ρ„Π°, Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов описанных Π½ΠΈΠΆΠ΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ… сосСн

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, ΠΏΡ€ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запросил Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΈΠ· ΠΊΡƒΡ‡ΠΈ. Но Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ "Π·Π°Π±Ρ‹Π»" Π΅Ρ‘ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, собствСнно, ΠΈ являСтся Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚Ρ‹ΠΌ. Π’Π΅ΠΌ самым, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ наши опасСния, Π½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΠΈΡ… ΠΊΠΎΡ€Π΅Π½ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ располоТСниС "Π½Π΅Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ" Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π² Π³Ρ€Π°Ρ„Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ сокращСния Π³Ρ€Π°Ρ„Π° Π΄ΠΎ минимального количСства ΡƒΠ·Π»ΠΎΠ², ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π΅Ρ‰Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ ΠΈ Π² ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Ρ‚Ρ€Π΅Ρ… соснах Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€.

Но ΠΌΠΎΠΆΠ΅Ρ‚ случится Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ сокращая число Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π² Π³Ρ€Π°Ρ„Π΅ Π²Ρ‹ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ…ΠΎΠ΄ взаимодСйствия Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ элСмСнтами вашСй систСмы ΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° пСрСстанСт ΠΏΡ€ΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ. Π’ этом случаС придСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠΎΠ»Π½ΠΎΡ€Π°Π·ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ Π³Ρ€Π°Ρ„ΠΎΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ Π½ΠΈΠΆΠ΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ изолятора

Для простоты излоТСния Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π³Ρ€Π°Ρ„ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². Она ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Π½Π° рисункС.

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 12

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°Ρ€Π°Π²Π½Π΅ с Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ мСдиастримСра ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΊΡ€Π°Ρ„Ρ‚ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° F1…F4, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ сдСлали Π΄Π°Π²Π½ΠΎ ΠΈ Π² ΠΈΡ… коррСктности Π½Π΅ ΡΠΎΠΌΠ½Π΅Π²Π°Π΅Ρ‚Π΅ΡΡŒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² нСсколько ΠΈΠ· Π½ΠΈΡ… имССтся ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти. Запуская Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ Π½Π°Π΄Π·ΠΎΡ€ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΈΠ· Π΅Π³ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ запросил Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство памяти ΠΈ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ» Π΅Π³ΠΎ Π² ΠΊΡƒΡ‡Ρƒ N-ΠΎΠ΅ количСство Ρ€Π°Π·. Π›Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Π±ΡƒΠ΄Π΅Ρ‚ ссылка Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Ρ‚ΠΈΠΏΠ° MS_VOID_SOURCE. Π£ Π½Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° такая β€” Π·Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΠ· ΠΊΡƒΡ‡ΠΈ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΅Ρ‘ Ρ‚ΡƒΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹. Π’.Π΅. ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠΌ Ρ„Π°ΠΊΡ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ участкС ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ бСздСйствиС ΠΏΡ€ΠΈΠ²Π΅Π΄ΡˆΠ΅Π΅ ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ памяти, прСдлагаСтся ввСсти Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ сообщСния со Π²Ρ…ΠΎΠ΄Π° Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄, Π½ΠΎ ΠΏΡ€ΠΈ этом создаСт Π½Π΅ Π»Π΅Π³ΠΊΡƒΡŽ, Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ "Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ" копию Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ удаляя сообщСниС, ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΠΉ Π½Π° Π²Ρ…ΠΎΠ΄. Π‘ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ изолятором. ПолагаСм, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ простой, Ρ‚ΠΎ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° Π² Π½Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π°. И Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ свойство β€” Ссли ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π² любоС мСсто нашСго Π³Ρ€Π°Ρ„Π°, Ρ‚ΠΎ это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ скаТСтся Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ схСмы. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€-изолятор Π² Π²ΠΈΠ΄Π΅ ΠΊΡ€ΡƒΠ³Π° с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠΌ.

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ изолятор сразу послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° voidsourse:
Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 12

Π‘Π½ΠΎΠ²Π° запускаСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² это Ρ€Π°Π·, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π»ΠΎΠΆΠΈΡ‚ Π²ΠΈΠ½Ρƒ Π½Π° изолятор. Π’Π΅Π΄ΡŒ это ΠΎΠ½ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ создаСт Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΌ Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ нСизвСстным Π½Π΅Ρ€Π°Π΄ΠΈΠ²Ρ‹ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ (ΠΈΠ»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом сдвигаСм изолятор ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²ΠΏΡ€Π°Π²ΠΎ, Π½Π° ΠΎΠ΄ΠΈΠ½ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈ снова запускаСм Π°Π½Π°Π»ΠΈΠ·. Π’Π°ΠΊ, шаг Π·Π° шагом двигая изолятор Π²ΠΏΡ€Π°Π²ΠΎ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π² Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° количСство "ΡƒΡ‚Π΅ΠΊΡˆΠΈΡ…" Π±Π»ΠΎΠΊΠΎΠ² памяти ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π° этом шагС изолятор оказался Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ сразу послС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Если "ΠΏΠ»ΠΎΡ…ΠΎΠΉ" Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π±Ρ‹Π» ΠΎΠ΄ΠΈΠ½, Ρ‚ΠΎ ΡƒΡ‚Π΅Ρ‡ΠΊΠ° ΠΈ вовсС ΠΏΡ€ΠΎΠΏΠ°Π΄Π΅Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ (ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…). "ΠŸΠΎΡ‡ΠΈΠ½ΠΈΠ²" Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ изолятор Π²ΠΏΡ€Π°Π²ΠΎ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ±Π΅Π΄Ρ‹ Π½Π°Π΄ ΡƒΡ‚Π΅Ρ‡ΠΊΠ°ΠΌΠΈ памяти.

РСализация Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°-изолятора

РСализация изолятора выглядит Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:

/* Π€Π°ΠΉΠ» iso_filter.h  ОписаниС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. */

#ifndef iso_filter_h
#define iso_filter_h

/* Π—Π°Π΄Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. */
#include <mediastreamer2/msfilter.h>

#define MY_ISO_FILTER_ID 1024

extern MSFilterDesc iso_filter_desc;

#endif

Π‘Π°ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€:

/* Π€Π°ΠΉΠ» iso_filter.c  ОписаниС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. */

#include "iso_filter.h"

    static void
iso_init (MSFilter * f)
{
}
    static void
iso_uninit (MSFilter * f)
{
}

    static void
iso_process (MSFilter * f)
{
    mblk_t *im;

    while ((im = ms_queue_get (f->inputs[0])) != NULL)
    {
        ms_queue_put (f->outputs[0], copymsg (im));
        freemsg (im);
    }
}

static MSFilterMethod iso_methods[] = {
    {0, NULL}
};

MSFilterDesc iso_filter_desc = {
    MY_ISO_FILTER_ID,
    "iso_filter",
    "A filter that reads from input and copy to its output.",
    MS_FILTER_OTHER,
    NULL,
    1,
    1,
    iso_init,
    NULL,
    iso_process,
    NULL,
    iso_uninit,
    iso_methods
};

MS_FILTER_DESC_EXPORT (iso_desc)

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ

Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΈΡ… исслСдований, Π² мСдиастримСрС прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ доступа ΠΊ памяти Π½Π° ваши собствСнныС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΈΠΌΠΎ основной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ "ΠšΡ‚ΠΎ, ΠΊΡƒΠ΄Π° ΠΈ Π·Π°Ρ‡Π΅ΠΌ". ΠŸΠΎΠ΄ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ дСлаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

OrtpMemoryFunctions reserv;
OrtpMemoryFunctions my;

reserv.malloc_fun = ortp_malloc;
reserv.realloc_fun = ortp_realloc;
reserv.free_fun = ortp_free;

my.malloc_fun = &my_malloc;
my.realloc_fun = &my_realloc;
my.free_fun = &my_free;

ortp_set_memory_functions(&my);

Вакая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ€ΡƒΡ‡Π°Π΅Ρ‚ Π² случаях, ΠΊΠΎΠ³Π΄Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ замСдляСт Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° систСмы Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ встроСна наша схСма. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации приходится ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

ΠœΡ‹ рассмотрСли Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСйствий для простого Π³Ρ€Π°Ρ„Π°, Π½Π΅ содСрТащСго Ρ€Π°Π·Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ. Но этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… случаСв, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ с услоТнСниСм, Π½ΠΎ идСя останСтся Ρ‚ΠΎΠΉ ΠΆΠ΅.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΌΡ‹ рассмотрим вопрос ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Ρ‚ΠΈΠΊΠ΅Ρ€ ΠΈ способы Π±ΠΎΡ€ΡŒΠ±Ρ‹ с Ρ‡Ρ€Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π² мСдиастримСрС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ