C++程序计算出我的电脑有多少内存?

标签 c++

下面的方法行得通吗?

将一个指针(指向任何类型的对象)初始化为 0。

int* thisPtr = 0;

通过递增指针直到到达最后一个内存位置来执行指针运算。我们会知道它是最后一个内存位置,因为向指针加 1 不会做任何事情。跟踪我们访问了多少内存位置。

int count = 1;
 while (thisPtr + 1 > thisPtr) { 
    ++thisPtr;
    ++count;
}

现在 count 等于我们能够访问的内存位置的数量。将它乘以指针中的字节数。

int bytesInMemory = count * sizeof(int*);

这有用吗???如果不是,为什么,正确的方法是什么?

最佳答案

不,它没有。

理论上,它的作用是不确定的。实际上,对于 32 位程序,它将始终返回 4GB,而对于 64 位程序,它会花费大量时间(例如:比宇宙年龄还长)。

指针只是数字。如果将 int* thisPtr 替换为 unsigned int thisPtr,将 thisPtr++ 替换为 thisPtr += 4 并替换 thisPtr + 1thisPtr + 4,你会得到一个等效的程序(在 32 位系统上)。它所做的只是找到一个整数的最大可能值。

C++ 没有办法知道你的系统有多少内存。操作系统将有办法做到这一点,但没有适用于任何操作系统的标准 C++ 方法。

关于C++程序计算出我的电脑有多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21521042/

相关文章:

c++ - 在 requires 参数列表中,您可以引入导致替换失败的类型吗?

c++ - 可移植线程安全的懒惰单例

c++ - 对于太大的矩阵, Armadillo eigs_sym() 的特征值分解失败

c++ - 实现抽象类

c++ - 在 main 中包含基类和继承类的 header

c++ - 传入一个迭代器,它只迭代满足特定条件的元素

c++ - std::string和int的串联导致移位。为什么?

c++ - InterviewStreet 查找字符串

c++ - 'x' 的声明具有不同的语言链接

c++ - 如何在 C++ 中使用回调?