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

In addition to using strlen, you could also use sizeof on a

char testChar1[] = "Hi";

EDIT: yes, this includes the null terminator, which IMO is an advantage over strlen. The actual size does include the null terminator.

于 2013-02-13T09:14:59.123 回答
2

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

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

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

终止零字符需要 1。

于 2013-02-13T09:14:00.153 回答
0

sizeof(testChar1) return size of pointer, if you want to test string length try replace sizeof with strlen

于 2013-02-13T09:14:17.333 回答
0

In this instance you're only printing the size of the pointers and not the chars. So really, you would want to print the pointer, then dereference it and print the size of the memory it points to as well.

于 2013-02-13T09:15:00.430 回答
0
I want to know how much memory every variable uses in stack .

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

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

于 2013-02-13T09:44:31.053 回答
0

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

std::cout<<strlen(testChar1)<<std::endl;
std::cout <<strlen(testChar2) <<std::endl; 
std::cout <<strlen(testChar3)<<std::endl;
于 2013-02-13T09:20:20.967 回答