簡體   English   中英

向量拋出bad_alloc

[英]vector is throwing bad_alloc

我有以下代碼std::bad_alloc異常:

std::vector<std::vector<double>> myVector(nlines);
    for(int i = 0; i < nlines; i++)
    {
        try
        {
            std::vector<double> iVector(ncolumns);
            myVector[i] = iVector;
        }
        catch (std::exception& e)
        {
            /* catches a bad_alloc here */
        }
    }
}

nlines大約為500,000( ncolumns通常小於10)時,此代碼似乎可以工作,但是當我在nlines = 2,600,000的完整數據集上嘗試此操作時,我得到bad_alloc異常。

我有12 GB的內存,並且在運行程序時查看我的內存使用率,從28%(啟動前)到42%(拋出異常時)。 因此,看起來我仍然有可用的內存。

我發現這篇文章說向量在堆上分配了它們的內存。 根據此帖子 (鏈接到此MSDN頁面),我可以設置代碼可以使用的堆(以字節為單位)。 最初,堆提交大小和堆保留大小為空白。 當我輸入2000000000(2 GB)的值時,我仍然遇到相同的問題。

為了使事情更有趣,此C ++代碼(非CLI)是使用C#.NET應用程序中的互操作調用的。 對堆提交大小和堆保留大小的修改是在C ++項目上設置的。 我不知道是否還需要在.NET項目中進行設置,或者如何設置。

任何建議或幫助,將不勝感激。

正如Neil Kirk指出的那樣, 此MSDN頁面中所述,32位進程僅限於2GB內存。 對於無人值守和托管應用程序,這是正確的。

有很多關於此的問題,例如,我發現了這些問題:

在64位操作系統上,32位進程可以訪問多少內存?

Windows上任何單個進程可以處理的最大內存量

設置最大內存使用率C#

以我為例,我認為.NET和非托管代碼之間的互操作正在進行某些緩沖,因此正在占用可用內存。 理想情況下,我應該只有2個或3個2,600,000 x 10個元素的2D向量(如果雙精度數是8字節,那么它仍然小於1 GB)。 我將需要對此進行進一步調查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM