下面的方法行得通吗?
将一个指针(指向任何类型的对象)初始化为 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 + 1
和 thisPtr + 4
,你会得到一个等效的程序(在 32 位系统上)。它所做的只是找到一个整数的最大可能值。
C++ 没有办法知道你的系统有多少内存。操作系统将有办法做到这一点,但没有适用于任何操作系统的标准 C++ 方法。
关于C++程序计算出我的电脑有多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21521042/