c++ - LocalAlloc 和 LocalRealoc 用法

标签 c++ memory windows-mobile

我有一个 Visual Studio 2008 C++ Windows Mobile 6 应用程序,我在其中使用 FindFirst()/FindNext() 样式 API 来获取项目集合。我不知道有多少项目会提前列入 list 。所以,我想为这些项目动态分配一个数组。

通常,我会使用 std::vector<> ,但是,出于其他原因,这不是此应用程序的选项。所以,我正在使用 LocalAlloc()LocalReAlloc() .

我不清楚的是这个内存应该标记为固定的还是可移动的。无论哪种方式,应用程序都运行良好。我只是想知道什么是“正确的”。

int count = 0;
INFO_STRUCT* info = ( INFO_STRUCT* )LocalAlloc( LHND, sizeof( INFO_STRUCT ) );
while( S_OK == GetInfo( &info[ count ] )
{
    ++count;
    info = ( INFO_STRUCT* )LocalRealloc( info, sizeof( INFO_STRUCT ) * ( count + 1 ), LHND );
}

if( count > 0 )
{
    // use the data in some interesting way...
}

LocalFree( info );

谢谢, 保罗H


编辑:响应者(并非不合理地)对使用 LocalAlloc() 而不是其他更好的选择挂断了电话。因此,我将提供更多背景信息。

这段代码是从 RAPI 可调用 DLL 中执行的。因此,在这种情况下,它看起来更像这样:

FOO_API int RapiInvokable_Foo( DWORD /*cbInput*/, 
                               BYTE* /*pInput*/,
                               DWORD* pcbOutput, 
                               BYTE** ppOutput,
                               IRAPIStream* /*pStream*/ )
{
    int count = 0;
    INFO_STRUCT* info = ( INFO_STRUCT* )LocalAlloc( LPTR, sizeof( INFO_STRUCT ) );
    while( S_OK == GetInfo( &info[ count ] )
    {
        ++count;
        info = ( INFO_STRUCT* )LocalRealloc( info, sizeof( INFO_STRUCT ) * ( count + 1 ), LHND );
    }

    *ppOutput = ( BYTE* )info;
    *pcbOutput = sizeof( INFO_STRUCT ) * ( count + 1 );
    return S_OK;
}

来自CeRapiInvoke()文档:

应用程序应使用 LocalAlloc 函数为 pInput 参数分配内存。调用者负责释放 pInput。系统为 ppOutput 参数分配内存。当应用程序完成缓冲区后,它应该使用 LocalFree 函数释放内存。

最佳答案

根据 MSDN,使用本地函数没有任何好处:http://msdn.microsoft.com/en-us/library/aa366723(VS.85).aspx .为什么不只使用常规的 malloc 和 free 或 new 和 delete。它们可能是您的最佳选择。

关于c++ - LocalAlloc 和 LocalRealoc 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784264/

相关文章:

python - 如何在 Python 中存储计算结果,这样我的程序就不会对同一事物进行两次计算?

c# - 如何以编程方式调用事件?

javascript - 从 IE Mobile 中的 iframe 中的脚本访问父级的 DOM

c++ - 如何在 Pocket PC 上显示/隐藏 SIP

c++ - 防止 shell 命令替换

c++ - clang 不会对 header 中的 "defined but not used"发出警告,而 gcc 会警告

c++ - Arduino:micros() 中的 for 循环

尽管增加,PHP 内存限制已耗尽

PHP:生产服务器上的内存使用率非常高,而本地计算机上的内存使用率很低

c++ - 为什么 std::istringstream 在三元 (?:) 运算符中的解析结果与 std::ifstream 不同?