カメラから直接captureOutputのビデオフレームを処理するiOSアプリがあります。処理の一環として、別のソース ファイルでいくつかの C 関数を呼び出しています。UIImages を生データに変換し、これらを迅速に渡します。すべての処理は、ビデオ出力に関連付けられたキューで行われます。
これは、ある程度まではうまくいくようです。渡すデータが大きくなりすぎて、C 関数の初期化段階で EXC_BAD_ACCESS エラーがランダムに表示されるようになると、限界に達しているようです。初期化とは、小さな静的配列を宣言し、それらをゼロなどに設定することです。
大量のデータを渡すと何らかのスタック制限に達したのではないかと思ったので、Other Linker Flags と -Wl,-stack_size を使用してスタック サイズを増やしてみましたが、違いはないようでした。
この方法で非 UI スレッドから C 関数を呼び出す場合に注意すべきことは他にありますか?
少し一般的になって申し訳ありませんが、コードの詳細を投稿することはできません。この種の状況に対する一般的なアドバイスとヒントを探しています。
いくつかの追加情報 - Objective-C のビデオ処理側でメモリの解放と自動解放プールの使用に問題がありました (別のスレッドを使用しているため、推奨されています) - おそらく C コードで同じ問題に直面しています。Cでリリース/解放が実行される頻度を上げる方法はありますか、それとも私は自分のしっぽを追いかけているだけですか?