Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamic Memory Allocation in fast RAM

Tags:

People also ask

Is dynamic memory allocation faster?

In this memory allocation scheme, execution is faster than dynamic memory allocation. In this memory allocation scheme, execution is slower than static memory allocation. In this memory is allocated at compile time.

Is dynamic memory allocation slow?

Dynamic memory allocation and deallocation are very slow operations when compared to automatic memory allocation and deallocation. In other words, the heap is much slower than the stack.

Is dynamic memory allocation faster than static?

Static allocation is for static local, and global (file-scope) variables. Nonetheless, dynamic allocation is never faster. In C and C++ it's a system call, which are slow. Even if it wasn't so slow, automatic and static allocation are instantaneous.

What is dynamic memory allocation in Hyper V?

Dynamic memory allocation is a memory management technique in which a program can request and return memory while it is executing. In a virtualized environment, available memory on a physical host is pooled and distributed to virtual machines (VMs) that are running on that host when needed.


On a Windows 32-bit and 64-bit machine, I have to allocate memory to store large amounts of data that are streaming live, a total of around 1GB. If I use malloc(), I am going to obtain a virtual memory address, and this address could be actually causing some paging to the hard drive depending on the amount of memory I have. Unfortunately I'm afraid that the HD will impact performance and cause data to be missing.

Is there a way to force memory to allocate only in RAM, even if it means that I get an error when not enough memory is available (so the user needs to close other things or use another machine)? I want to guarantee that all operations will be done in memory. If this fails, forcing the application to exit is acceptable.

I know that another process may come in and itself take some memory, but I am not worried because in this machine that is not happening (it'll be the only application on the machine to be doing this large allocation).

[Edit:] My attempt so far has been to try use VirtualLock as follows:

if(!SetProcessWorkingSetSize(this, 300000, 300008))
    printf("Error Changing Working Set Size\n");

// Allocate 1GB space
unsigned long sz = sizeof(unsigned char)*1000000000;
unsigned char * m_buffer = (unsigned char *) malloc(sz);

if(m_buffer == NULL)
{
    printf("Memory Allocation failed\n");
}
else
{
    // Protect memory from being swapped
    if(!VirtualLock(m_buffer , sz))
    {
           printf("Memory swap protection failed\n");
    }           
}

But the change in Working set fails, and so does the VirtualLock. Malloc does return non-null.

[Edit2] I have tried also:

 unsigned long sz = sizeof(unsigned char)*1000000000;
 LPVOID lpvResult;
 lpvResult = VirtualAlloc(NULL,sz, MEM_PHYSICAL|MEM_RESERVE, PAGE_NOCACHE);

But lpvResult is 0, so no luck there either.