C++ 内存使用估计
我想知道变量的内存使用情况,我尝试了以下方法:C++ 内存使用估计,c++,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 <<s
#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;
}
我认为我做的事情不对。我想知道每个变量在堆栈中使用了多少内存
编辑1
同时如果我做了
char*testChar3=NULL
;程序崩溃了。那么,这是否意味着没有相同的内存使用?只要打印指针的大小,它们总是相同的。您需要将字符串的strlen
乘以单个字符的大小
编辑:根据我的评论和@Suma的更正:
cout << (strlen(testChar) + 1) * sizeof(char) + sizeof(testChar);
cout只要打印指针的大小,它们总是一样的。您需要将字符串的strlen
乘以单个字符的大小
编辑:根据我的评论和@Suma的更正:
cout << (strlen(testChar) + 1) * sizeof(char) + sizeof(testChar);
coutsizeof(testChar1)
返回指针大小,如果要测试字符串长度,请尝试将sizeof
替换为strlensizeof(testChar1)
返回指针大小,如果要测试字符串长度,请尝试将sizeof
替换为strlen
除了使用strlen
,还可以在
char testChar1[] = "Hi";
编辑:是的,这包括空终止符,IMO比strlen有优势。实际大小确实包括空终止符。除了使用strlen
,您还可以在
char testChar1[] = "Hi";
编辑:是的,这包括空终止符,IMO比strlen有优势。实际大小不包括空终止符。在本例中,您只打印指针的大小,而不打印字符。因此,实际上,您需要打印指针,然后取消引用它并打印它指向的内存大小。在本例中,您只打印指针的大小,而不打印字符。因此,实际上,您需要打印指针,然后取消引用并打印它所指向的内存大小。您实际上是在打印指针在系统上占用的字节数。我认为你需要做的是使用strlen函数。看看这里
std::cout实际上,您正在打印指针在系统上占用的字节数。我认为你需要做的是使用strlen函数。看看这里
std::cout
程序打印的内容正是您想要的
如果您真正想知道变量指针指向的字符字符串占用了多少内存(其中??!!),请阅读另一个答案
程序打印的内容正是您想要的
如果您真正想知道变量指针指向的字符字符串占用了多少内存(其中??!!),请阅读另一个答案。这是堆栈或堆在执行时使用的相同计数吗?加上每个字符串的恒定额外内存,在本例中是指针。那么我应该做strlen(testChar)*sizeof吗(testChar)
?术语每个字符串的恒定附加内存
指的是@ACB no。您应该执行strlen(testChar)*sizeof(char)+sizeof(testChar)
@IvayloStrandjev不要忘记终止零。这是堆栈或堆在执行时使用的相同计数吗?加上每个字符串的恒定额外内存,在本例中是指针。我应该执行strlen(testChar)*sizeof(testChar)吗
?术语每个字符串的恒定附加内存
指的是@ACB编号。您应该执行strlen(testChar)*sizeof(char)+sizeof(testChar)
@IvayloStrandjev不要忘记终止零。可能重复或可能设置char*testChar3=NULL
,然后“读取”/稍后在它仍然为空时访问它将导致空指针异常-这就是程序崩溃的原因。好的,那么这个变量在设置为空时会从堆栈中消失吗?不,是的,有点。你有一个char
指针。如果你设置char*
(char
指针)如果设置为null,则仍然有一个char*
;它只是不指向任何内容。此外,打印指针大小时看到4
的原因是指针由32位(4字节)组成用于32位可执行文件。可能重复或可能设置char*testChar3=NULL
然后“读取”/稍后在它仍然为空时访问它将导致空指针异常-这就是程序崩溃的原因。好的,那么这个变量在设置为空时会从堆栈中消失吗?不,是的,有点。你有一个char
指针。如果你设置char*
(char
指针)如果设置为null,则仍然有一个char*
;它只是不指向任何内容。此外,打印指针大小时看到4
的原因是指针由32位(4字节)组成对于32位可执行文件,+1@rockstar感谢您的支持+1@rockstar感谢您的支持support@ACB请注意,这包括以null结尾的字符。为什么不char const wtf[]=“hi”
?@ACB请注意,这包括以null结尾的字符。为什么不char const wtf[]=“hi”
?
I want to know how much memory every variable uses in stack .