Ich arbeite an einem Multithread-Plugin. Wenn ich eine freie() auf ziemlich großen Speicherblöcken (> 10 MB) mache, verlangsamt sich die Anwendung mit meinem Plugin vorübergehend zu sehr. (Es ist eine Audio-App, der Audio-Thread bekommt zu wenig Zeit). Ich bin mir nicht sicher, ob das free() viel CPU benutzt oder andere Threads viel zu lange blockiert. Es scheint, dass ein Anruf bei madvice() viel Arbeit macht. Ich bin es gewohnt frei zu sein() brauche nicht viel Zeit (; nicht wenn ich im 32 Bit Modus laufe).free() blockiert andere Threads, Systemverlangsamung
einige Infos: OSX 10.8 64 Bit-Plugin & Programm C++
Irgendwelche Vorschläge, wie es weitergeht sind sehr willkommen.
Vielleicht dauert es zu lange, weil es den Speicher für Debugging-Zwecke freigibt. Holen Sie sich eine kostenlose Version, die das nicht tut. –
Können Sie das Programm instrumentieren - auf OS X ist es sehr einfach, Instrumente zu verwenden. Das sagt Ihnen, wo genau Ihr Programm die meiste Zeit verbringt. – parry
Sie sollten die Speicherreservierung oder Freigabe von Echtzeit-Priorität-Audio-Callback-Threads vermeiden. Lesen Sie die Empfehlungen in [Technisches Q & A QA1467: CoreAudio Overload Warnings] (https://developer.apple.com/library/mac/qa/qa1467/_index.html). Die malloc-Implementierung verwendet Sperren für die Thread-Sicherheit. –