gpt4 book ai didi

Windows的C++内存分配

转载 作者:可可西里 更新时间:2023-11-01 11:52:57 26 4
gpt4 key购买 nike

所以我正在通过 c/c++ 第五版阅读 Windows,该版本在 c11 之前发布,因此缺少一些较新的数据类型和方法,但被吹捧为一本关于 Windows 的好书。

我只是在学习 Windows 开发和 C++,当我用书中的代码示例发布与文件操作相关的问题时,我收到反馈说使用 malloc 函数分配缓冲区不再是一个好习惯,因为它需要释放内存.我应该改用 vector 或字符串。

没关系。但是Windows自带的数据类型是怎么回事呢?这是书中的代码示例:

//initialization omitted
BOOL bResult = GetLogicalProcessorInformation(pBuffer, &dwSize);
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
_tprintf(TEXT("Impossible to get processor information\n"));
return;
}
pBuffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(dwSize);
bResult = GetLogicalProcessorInformation(pBuffer, &dwSize);

对于此类查询,是否有比使用 malloc 分配适当内存量更好的解决方案?

或者声明一个 PROCESOR INFORMATION STRUCTRUE 类型的 vector 是可行的方法吗?

最佳答案

win32 api 有时使用起来很痛苦,但你总是可以使用 std::vector<char> 中的原始字节。作为SYSTEM_LOGICAL_PROCESSOR_INFORMATION :

std::vector<char> buffer(sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION));
size_t buffersize = buffer.size();

SYSTEM_LOGICAL_PROCESSOR_INFORMATION *ptr
= (SYSTEM_LOGICAL_PROCESSOR_INFORMATION *)&(buffer[0]);

BOOL bResult = GetLogicalProcessorInformation(ptr, &buffersize);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
buffer.resize(buffersize);
ptr = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION *)&(buffer[0]);
bResult = GetLogicalProcessorInformation(ptr, &buffersize);
}

请注意 &(buffer[0]) 的值可能会在 buffer.resize(...); 之后改变除此之外,我一般不使用win32 api,所以任何关于如何调用win32的错误,你必须自己修复

关于Windows的C++内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com