这可以通过程序来完成。
消耗 CPU:
一个简单的死循环不会消耗所有的 CPU,因为你的 CPU 可能有多个逻辑核心,所以你需要创建多个线程来完成它。代码如下:
DWORD WINAPI ConsumeSingleCore(LPVOID lpThreadParameter)
{
DWORD_PTR mask = 1 << (int) lpThreadParameter;
::SetThreadAffinityMask(::GetCurrentThread(), mask);
for (;;) {}
}
void ConsumeAllCores()
{
SYSTEM_INFO systemInfo = { 0 };
::GetSystemInfo(&systemInfo);
for (DWORD i = 0; i < systemInfo.dwNumberOfProcessors; ++i)
{
::CreateThread(NULL, 0, ConsumeSingleCore, (LPVOID)i, 0, NULL);
}
}
消耗内存:
在堆上分配足够多的对象会有所帮助,虽然不是很准确,因为系统内部结构(如堆)会产生一些开销。如果您需要准确的数字。我认为直接使用虚拟内存将是一个不错的选择。代码如下:
void ConsumeRAM()
{
SYSTEM_INFO systemInfo = { 0 };
::GetSystemInfo(&systemInfo);
DWORD memSize = 1024 * 1024 * 1024;
char *buffer = (char *)::VirtualAlloc(NULL, memSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
// Touch all the pages, so system will try to allocate physical memory for them.
for (DWORD memAddrOffset = 0; memAddrOffset < memSize; memAddrOffset += systemInfo.dwPageSize)
{
buffer[memAddrOffset] = 0;
}
return;
}
如果你只是需要一些工具来测试,你可以试试CPU overload消耗一定数量的核心,MemAlloc消耗一定数量的内存。