内存使用估算

时间:2013-02-13 09:12:15

标签: c++

我想知道变量的内存使用情况,我试过这个:

#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

我认为我做的不对。我想知道每个变量在堆栈中使用了多少内存。

编辑1

同时如果char* testChar3 = NULL;程序崩溃了。那么它是否意味着没有相同的内存使用?

6 个答案:

答案 0 :(得分:2)

你只需打印指针的大小,它们总是一样的。你需要的是将字符串的strlen乘以单个字符的大小。

编辑:根据我的评论和@Suma的更正:

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

终止零字符需要1。

答案 1 :(得分:2)

除了使用strlen之外,您还可以在

上使用sizeof
char testChar1[] = "Hi";

编辑:是的,这包括空终止符,IMO优于strlen。实际大小确实包括空终止符。

答案 2 :(得分:0)

sizeof(testChar1)返回指针大小,如果要测试字符串长度,请尝试将sizeof替换为strlen

答案 3 :(得分:0)

在这种情况下,您只打印指针的大小而不是字符。所以,你真的想要打印指针,然后取消引用它并打印它所指向的内存大小。

答案 4 :(得分:0)

实际上是在打印指针在系统上占用的字节数。我认为你需要做的是使用strlen函数。在这里查看。 strlen

std::cout<<strlen(testChar1)<<std::endl;
std::cout <<strlen(testChar2) <<std::endl; 
std::cout <<strlen(testChar3)<<std::endl;

答案 5 :(得分:0)

I want to know how much memory every variable uses in stack .

您的程序打印正是您想要的。

如果您真正想要的是知道有多少内存(在哪里?? !!)占用您的变量指向的字符串 - 指针,请阅读另一个答案。