私はOSに依存しないロックレスキューを書いていますが、これまでのところうまく機能していますが、メモリ管理に小さな問題があります。そのgccの問題なのか私のものなのかわかりません。問題:要素がリストに追加されるとメモリが増加しますが、要素がリストから削除されると(free(elementPointer);)メモリ使用量は変更されません。
しかし、私がpthreadを使用する場合、N個のプロデューサーとM個のコンシューマー (1<N<20, 1<M<20)
のメモリ使用量は常に約10 mbであるため(約10kkの要素を追加および削除しようとする場合)、freeが機能しているように見えます。
そして面白いことに、VS 2010(同じコード、スレッドなし)では、無料で正常に動作し、メモリが解放されます(タスクマネージャーを監視)。
テストを行い、1kkの要素を追加し、すべてを追加した後、すべての要素を1つずつ削除しました(スレッドなし)。
Linux-0.08秒
Windows〜57秒
Linux(無料なし)-0.07秒
Windows(無料なし)-0.9秒
では、問題は、スレッドが使用されていないのにLinuxCでメモリが解放されないのはなぜかということです。必要に応じてコードを投稿できます。
GCCバージョン:4.4.3