void foo(const char* s) { }
foo("bar");
- メモリの
bar
割り当てはどこにありますか? - 関数の引数で匿名文字列を操作するための最も快適でメモリリークのない方法は何ですか?(私はマジックストリングがあってはならないことを知っています、ただ好奇心が強いです。)
void foo(const char* s) { }
foo("bar");
bar
割り当てはどこにありますか?あなたの例では、引数は文字列リテラルであり、静的な有効期間があり、削除されることはありません。
「バー」はデータセクションで定義されており、アドレスはあなたがそれを持っているすべての場所でそれを置き換えます。foo関数は、そのアドレスへのポインターを使用して呼び出されます。
バーのメモリはコンパイル時に割り当てられます。したがって、割り当てを解除する必要はありません。
C++バイナリにはさまざまなセクションがあります。いくつかの例は、テキスト(コードが格納されている場所)、スタック、およびヒープです。読み取り専用の静的メモリのセクションもあります。そこに文字列が保存されると思います。
文字列はヒープ上にないため、解放する必要はありません。