1

free私の OS クラスの割り当てでは、 libc とは異なる動作をするという名前の C 関数を定義する必要がありfreeます。(メモリ アロケータの演習を行っています。)

私のコードはすべて の独自のバリアントを使用しているfreeため、独自のコードでは問題になりません。ただし、glibc がfree内部的に使用する場合 (vprintf など)、自分のfreeものではなく自分のものを使用することになります。

Ubuntu 11.10 (libc6 バージョン 2.15-0ubuntu10) を使用しています。他の Ubuntu バージョンでは発生しないと聞いたので、コンパイル/リンク フラグを介して他のバージョンの動作を取得できるかどうか疑問に思います。

ところで、独自の関数に名前を付けることfreeはベストプラクティスではありませんが、選択肢がないとしましょう:-)

4

2 に答える 2

2

関数に外部リンケージがある場合は、名前を付けないでください。free関数名は、外部リンケージの識別子として予約されています。

(C99、7.1.3p1) 「次の副次節 (将来の図書館の指示を含む) のいずれかにある外部リンケージを持つすべての識別子は、常に外部リンケージを持つ識別子として使用するために予約されています。」

于 2012-06-05T22:27:20.057 に答える
1

標準の関数と同じように動作しない関数を置き換えfreeたり、置き換えたりする場合は、Cライブラリの他の「便利な」関数を使用しないでください。IOに固執するだけです。または、独自のラッパーを作成して、便利な関数を提供します。mallocread(2)write(2)read(2)write(2)getc(3)printf(3)

于 2012-06-05T22:15:55.093 に答える