Memory allocation failed. Why?
ag0aep6g via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Nov 20 22:45:04 PST 2016
On 11/21/2016 07:36 AM, Stefan Koch wrote:
> On Monday, 21 November 2016 at 03:58:00 UTC, MGW wrote:
>> On Sunday, 20 November 2016 at 18:58:04 UTC, Basile B. wrote:
>>> On Sunday, 20 November 2016 at 17:47:50 UTC, MGW wrote:
>>>> import core.sys.windows.windows: MessageBoxA;
>>>>
>>>> void test() {
>>>> for(int i; i != 10; i++) {
>>>> ubyte[] buf;
>>>> for(int j; j != 100000000; j++) buf ~= 65;
>>>> MessageBoxA(null, "--on for--".ptr, "".ptr, 0);
>>>> // delete buf; // if ON - then memory delete in step
>>>> }
>>>> MessageBoxA(null, "--off for--".ptr, "".ptr, 0);
>>>> }
>>>>
>>>> void main() {
>>>> test();
>>>> MessageBoxA(null, "--The end--".ptr, "".ptr, 0);
>>>> }
[...]
> You are appending 100_000_000 Times.
> Note that this will take up much more then 100 MB.
> Because the allocator cannot always grow the array.
> All previously allocated blocks are still in scope and could be reached.
> Therefore the memory is not released.
How could they be reached? The only reference is `buf', and when
appending triggers relocation, `buf` should point to the new location, no?
More information about the Digitalmars-d-learn
mailing list