私はコマンドライン引数が文字配列であり、スタックに格納されていることを知っています。しかし、私は各引数のために割り当てられた実際のメモリを知りたい。例えばコマンドライン引数としてディレクトリ名 "/ tmp"を渡したとします。これはargv [1]に格納されます。しかし、私がテストしたところでは、プログラムでargv [1]を "/ tmp/log /"(サイズを増やしたもの)に変更することは許されています。これはどのように可能ですか?argv []にどのくらいのメモリが割り当てられていますか?
答えて
は、あなたの質問に答えるために、引数文字列と渡された環境で使用可能な合計最大サイズを得ることができます詳細は、http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.htmlを参照してください。 (私のLinuxマシンでは、制限は2097152です)。
あなたの例は、引数と環境が現実的に連続して格納されているので、文字列に追加すると引数の後にくるもの(環境変数)に上書きされます。 そのようなargv文字列を試してみることは悪い考えです。それらを変更したい場合は、それらを編集するか縮小するが、それらを拡張しようとすると問題が発生する。
これは非常にうまく答えます。さらに、argv [0] [0]の開始アドレスの後に100文字を出力しようとしました。引数と環境は実際には連続して格納されます。ありがとうございました。 – techiek7
Linuxの場合、パラメータにはcreate_elf_tables
が設定されます。この特定のプラットフォームでは、値がスタックに格納されていることが間違いありません。
Linuxは、引数と(初期)環境変数をスタックに格納するのに必要なだけのメモリを使用します。既に存在するものより多くを使用しようとすると、別のものを上書きしている(またはクラッシュしている)。
標準では、特殊な内部であるため、argvを変更することができます。
177 - パラメータargcとargvおよびargv配列が指す文字列は、プログラムによって変更可能で、プログラムの起動とプログラムの終了の間に最後に格納された値を保持するので、必要なものだけが割り当てられます割り当てまたは置換。
標準テキスト:
getconf ARG_MAX
コマンドラインから
またはsyconf同等: http://c0x.coding-guidelines.com/5.1.2.2.1.html
_proposed_ C標準を参照していることに注意してください。 – chux
- 1. キャッシュされたRDDにはどのくらいのメモリが割り当てられていますか?
- 2. どのくらいのメモリがSession変数に割り当てられていますか?
- 3. メモリが8Gヒープサイズを割り当てられています
- 4. すでに割り当てられている変数にメモリを割り当てていますか?
- 5. int x [10]はどのくらいのメモリを割り当てますか?
- 6. セグメンテーションフォールト、メモリが割り当てられていません
- 7. 演算子のオーバーロードにメモリが割り当てられていますか?
- 8. メモリがクラスに割り当てられている場合
- 9. 割り当てられたメモリのビュー
- 10. Calloc()が以前に割り当てられたメモリを割り当てようとしています
- 11. ... nullで、割り当てられていませんが、割り当てられているようですか?
- 12. スタックのメモリまたはJavaのヒープにメモリが割り当てられていますか?
- 13. 内部メモリが既にヒープに割り当てられている場合、オブジェクトのメモリをヒープに割り当てる必要がありますか?
- 14. Java:このプロセスにどれだけのメモリが割り当てられていますか?
- 15. Tensorflowはメモリが割り当てられていても割り当てできません。
- 16. HashMap要素にメモリが割り当てられるのはいつですか?
- 17. デストラクタが割り当てられたメモリを削除しない
- 18. Redshift WLM config:割り当てられていないメモリはどのように使用されますか?
- 19. メモリページにヒープが割り当てられていますか?
- 20. ローカル(共有)メモリが実際にどのように割り当てられていますか?
- 21. Cは割り当てられたメモリを数えます
- 22. なぜ私のiPhoneスウィフトアプリが割り当てられ、多くのメモリを使用していますか?
- 23. 構造体の配列にメモリが正しく割り当てられていませんか?
- 24. Objective Cでの割り当てと割り当て解除の速さはどれくらいですか?
- 25. 割り当てられたメモリからメモリの値を設定する
- 26. どのステージの送信元ポートが割り当てられていますか?
- 27. NSString用にメモリを割り当てていますか?
- 28. モノトゥーでどのくらいのメモリを割り当てることができますか?
- 29. どのくらいのメモリを割り当てることができますか?
- 30. データ()が割り当てられているjqueryデータの存続期間はどのくらいですか?
「私は知っている」その後は事実関係のない推測が続きます。 –
"しかし私はテストしましたが、プログラムではargv [1]を"/tmp/log/"(サイズが増えました)に変更することが許されています。はい、Cの標準では、 'argv'([N1570](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)、セクション5.1.2.2.1、第2節、最後の制約)、「サイズを大きくする」はおそらくUBです。ゼロ終端された文字列と同じくらい多くの変更可能な 'char []'があると仮定してください。 –
'argv [1] ="/tmp/log ")'の場合、 'argv [1]'が指し示す文字列のサイズを増やさず、あるポインタを別のものに置き換えます。私は 'strcat(argv [1]、"/log ")'が成功するとは思っていません。 – molbdnilo