我认为应该使用指针来帮助程序提高内存效率。我不明白为什么“ X”指针比“ Y”变量占用更多的空间。我正在64位Windows计算机上运行此程序。看看这个简单的程序。
#include <iostream>
using namespace std;
int main() {
// Creating new int
int *X = new int; *X = 2000000000;
cout << sizeof(X) << ", " << sizeof(*X) << endl;
// Deleting the new int
delete x;
cout << sizeof(X) << ", " << sizeof(*X) << endl;
// Using a simple variable
int Y = 2000000000;
cout << sizeof(Y);
}
这是我得到的输出: (8,4), (8,4), 和4。
有人可以举个例子说明指针实际上如何帮助节省内存吗?
答案 0 :(得分:1)
有人可以举个例子说明指针实际上如何帮助节省内存吗?
它实际上根本没有帮助您节省内存。没有理由认为它应该已经保存了内存。
为什么指针使用的内存比变量大?
变量使用(至少)类型所需的内存。类型的大小取决于它需要能够表示多少个不同状态。
例如,int
的大小必须至少为16位,以便表示根据语言规则要求表示的所有整数。另一方面,指针必须足够大,以便能够在任何内存地址(可以放置该对象的地址)中指向相应类型的任何对象。在典型的现代系统上,数据指针的大小通常与处理器的字长相同。
结论:指针变量可能比非指针变量大,因为不同的类型具有不同的内存需求,并且某些类型不需要能够表示与指针可能表示的一样多的不同状态。您的示例说明int
在您的系统上就是这种类型。
答案 1 :(得分:1)
指针可能有助于节省内存的典型情况的琐碎示例将传递信息。一些功能可能需要访问一些大对象。在这种情况下,传递的对象本身将创建该对象的副本,使第一个对象使用的内存量增加一倍。
struct Large{ char m_buf[1000]; };
void foo(Large large) {}
int main()
{
Large large{}; // allocates at least sizeof(Large) bytes ~ 1000 bytes
foo(large); // allocates at least sizeof(Large) bytes again ~ 1000 bytes
}
将指针传递给对象只会使内存消耗增加指针的大小。此外,它允许函数修改原始对象而不是副本。
void foo(Large * p_large) {}
int main()
{
Large large{}; // allocates at least sizeof(Large) bytes ~ 1000 bytes
foo(&large); // allocates at least sizeof(Large *) bytes ~ typically 4 or 8 bytes
}
C ++还为指针-参考提供了更安全的选择。
答案 2 :(得分:-2)
严格来说,指针是需要存储地址的变量。指针需要适当的长度来存储所讨论的地址。地址的长度必须合适。但是,根据类型(包括指针)的不同,变量的长度也可以不同。换句话说,虽然每种类型都有其特定范围的值,但指针必须能够包含该地址。
传递指针以节省空间的一个示例是在连续内存(即原始数组)中。如果您知道彼此相邻的100个整数,则只需将地址传递给第一个整数。