1

タイトルは私の質問です。メモリ内では、初期化方法に応じて引数をスタックまたはヒープに配置できますが、ハードコードされた情報はどのように処理されるのでしょうか?

例として、コンストラクターを使用しますifstream

これの違いは何ですか:

void function(){

    ifstream infile("home/some/file/path");

}

void function(char* filePath){

    ifstream infile(filePath); //filePath points to a character array which contains home/some/file/path

}

どちらか一方を使用すると、メモリへの影響が生じる可能性がありますか? (char* が正しく解放されていない場合、マルチスレッドはヒープの破損につながる可能性があります。など)。

より大きな問題に答えを適用できるように、違いと考えられる意味を理解しようとしています。すべての洞察を歓迎します。誤った記述や仮定を行った場合は、お気軽に修正してください。

4

3 に答える 3

0

「ハードコードされた」またはリテラル値は、通常、プログラムの命令の一部です。たとえば、次のようなことをすると

int i = 0;

値 0 は、アーキテクチャ レベルでアセンブリ コマンドを使用して読み込まれます。したがって、私が得ているのは、それらはコンパイラとプログラムによって処理され、おそらくメモリをまったく使用しないか、スタック上にあるということです。

char* などの値については、最初に文字列を使用することをお勧めします。文字列はメモリ割り当てを適切に処理するためですが、大きな文字列はヒープに格納されることが多く、小さな文字列 (7 文字未満程度) は最適化してスタックで処理されます ("new" が含まれていない場合)。

于 2013-08-19T19:47:56.657 に答える