2

変数のメモリ使用量について疑問に思っているので、これを試しました:

#include <iostream>

int main()
{
    char* testChar1 = "Hi";
    char* testChar2 = "This is a test variable";
    char* testChar3 = "";

    std::cout <<sizeof(testChar1)<<std::endl; 
    std::cout <<sizeof (testChar2) <<std::endl; 
    std::cout <<sizeof(testChar3)<<std::endl;
}

出力は次のとおりです。

4
4
4

私は正しいことをしていないと思います。すべての変数が stack で使用するメモリの量を知りたいです。

編集1

同時に、もしそうならchar* testChar3 = NULL; プログラムがクラッシュします。同じメモリ使用量がないということですか?

4

6 に答える 6

2

ポインターのサイズを出力するだけで、常に同じになります。必要なのはstrlen、文字列に単一の文字のサイズを掛けることです。

編集:私のコメントと@Sumaからの修正に従って:

cout << (strlen(testChar) + 1) * sizeof(char) + sizeof(testChar);

終端のゼロ文字には 1 が必要です。

于 2013-02-13T09:14:00.153 に答える
0

実際には、ポインターがシステムで使用するバイト数を出力しています。あなたがする必要があるのは、 strlen function を使用することだと思います。ここでチェックしてください。ストレン

std::cout<<strlen(testChar1)<<std::endl;
std::cout <<strlen(testChar2) <<std::endl; 
std::cout <<strlen(testChar3)<<std::endl;
于 2013-02-13T09:20:20.967 に答える
0
I want to know how much memory every variable uses in stack .

あなたのプログラムが印刷するものはまさにあなたが望むものです。

あなたが本当に欲しいのは、変数(ポインタ)が指す文字列を占めるメモリの量(どこで??!!)を知りたい場合は、他の回答を読んでください。

于 2013-02-13T09:44:31.053 に答える
0

sizeof(testChar1)ポインターのサイズを返します。文字列の長さをテストしたい場合は、置き換えsizeofてみてくださいstrlen

于 2013-02-13T09:14:17.333 に答える