最小化使用的内存

时间:2017-06-11 03:26:56

标签: c++ pointers memory

我怀疑,因为我们知道Pointer是一个存储地址的变量。 我可以使用

在该地址存储值
cin>>(*p);

不使用任何其他正常变量。 下面的代码解释相同:

#include'iostream'
int main()
{
    long long *p;
    cin>>(*p);
    cout<<(*p);
    return 0;
}

这样存储变量是对的吗?

如果我们可以存储这样的值,那么我们可以节省大量内存,因为我们只需要为指针变量分配内存。这远远小于普通长多数据类型的大小。

2 个答案:

答案 0 :(得分:2)

指针有一个未定义的值,因此任何在该地址写入的尝试都将导致未定义的行为。

更好:

int main()
{
    long long *p = new long long();  // heap allocation
    cin>>(*p);
    cout<<(*p);
    delete p;
    return 0;
}

OR

int main()
{
    long long p;  // stack variable
    cin>>p;
    cout<<p;
    return 0;
}

答案 1 :(得分:2)

hope this explains better 希望这张照片解释得更好。

左栏使用以下代码:

int main() {
    long long p;
    std::cin >> p;
    std::cout << p;
}

使用long long p来存储数据,它为p分配8个字节的空间,并在程序完成时释放该内存。

右栏正在使用你的代码(我做了一些改动/)

int main() {
    long long *p = new long long();
    std::cin >> *p;
    std::cout << *p;
    delete p;
}

它为32位机器上的指针分配4个字节,或者为64位机器上的指针分配8个字节。当您使用指针时,必须为其分配一个内存位置以便存储数据,因此它将在堆上为long long类型分配另外8个字节的内存。所以后者使用更多的内存。

为了提高内存效率,你应该坚持使用long long p,避免使用指针,再加上为指针分配和释放内存的速度很慢。