相关疑难解决方法(0)

VS2003 C++中不寻常的堆大小限制

我有一个使用大型数据数组的C++应用程序,并且在测试时已注意到内存不足,同时仍有大量可用内存.我已将代码缩减为示例测试用例,如下所示;

void    MemTest()
{
    size_t Size = 500*1024*1024;  // 512mb
    if (Size > _HEAP_MAXREQ)
        TRACE("Invalid Size");
    void * mem = malloc(Size);
    if (mem == NULL)
        TRACE("allocation failed");

}
Run Code Online (Sandbox Code Playgroud)

如果我创建一个新的MFC项目,包含此函数,并从InitInstance运行它,它在调试模式下工作正常(内存按预期分配),但在发布模式下失败(malloc返回NULL).单步执行释放到C运行时,我的函数内联我得到以下内容

// malloc.c

void * __cdecl _malloc_base (size_t size)

{
        void *res = _nh_malloc_base(size, _newmode);

        RTCCALLBACK(_RTC_Allocate_hook, (res, size, 0));

        return res;
}
Run Code Online (Sandbox Code Playgroud)

调用_nh_malloc_base

void * __cdecl _nh_malloc_base (size_t size, int nhFlag)
{
        void * pvReturn;

        //  validate size
        if (size > _HEAP_MAXREQ)
            return NULL;
'
'
Run Code Online (Sandbox Code Playgroud)

并且(size> _HEAP_MAXREQ)返回true,因此我的内存不会被分配.将大小放在手表上会显示512MB,这表明程序链接到一个不同的运行时库,并且具有更小的_HEAP_MAXREQ.为_HEAP_MAXREQ重写VC++文件夹会显示预期的0xFFFFFFE0,所以我无法弄清楚这里发生了什么.任何人都知道任何可能导致此问题的CRT更改或版本,或者我错过了哪些更明显的方法?

编辑:正如安德烈亚斯所建议的,在这个装配视图下看这个显示如下:

--- f:\vs70builds\3077\vc\crtbld\crt\src\malloc.c …
Run Code Online (Sandbox Code Playgroud)

c++ malloc visual-c++

6
推荐指数
1
解决办法
1859
查看次数

Visual C++中的堆帧有多大

在Visual C++中,如果我使用new在堆上创建一个对象,那么堆帧头和填充需要多少额外空间,特别是在发布代码中?我希望int可以说块中有多少可用空间,另一个可能是说当前正在使用多少空间,并且帧大小根据体系结构四舍五入到最接近的32位或64位.只是想知道VC++是否添加了保护字节,标志等额外的东西......并且帧大小四舍五入到更大的最小尺寸.换句话说,对于大量数据,在堆上使用大量小块数据是多么低效.

c++ heap visual-c++

4
推荐指数
1
解决办法
348
查看次数

内存泄漏使用malloc失败

我正在编写一个泄漏内存(主内存)的程序来测试系统在低系统内存和交换内存时的行为方式.我们使用以下循环定期运行并泄漏内存

main(int argc, char* argv[] )  
{
   int arg_mem = argv[1];

        while(1)
        {
          u_int_ptr =(unsigned int*)  malloc(arg_mem * 1024 * 1024);

        if( u_int_ptr == NULL )
           printf("\n leakyapp Daemon FAILED due to insufficient available memory....");

          sleep( arg_time );
        }

}
Run Code Online (Sandbox Code Playgroud)

上面的循环运行一段时间并打印消息"leakyapp Daemon FAILED由于可用内存不足......".但是当我运行命令"free"时,我可以看到运行该程序对主内存或交换没有影响.

难道我做错了什么 ?

c linux memory

3
推荐指数
1
解决办法
798
查看次数

标签 统计

c++ ×2

visual-c++ ×2

c ×1

heap ×1

linux ×1

malloc ×1

memory ×1