memory-management interview questions
Top memory-management frequently asked interview questions
This error message is being presented, any suggestions?
Allowed memory size of 33554432 bytes exhausted (tried to allocate
43148176 bytes) in php
Source: (StackOverflow)
Has anyone here ever used C++'s "placement new"? If so, what for? It looks to me like it would only be useful on memory-mapped hardware.
Source: (StackOverflow)
I just finished a test as part of a job interview, and one question stumped me - even using google for reference. I'd like to see what the stackoverflow crew can do with it:
The “memset_16aligned” function requires a 16byte aligned pointer passed to it, or it will crash.
a) How would you allocate 1024 bytes of memory, and align it to a 16 byte boundary?
b) Free the memory after the memset_16aligned has executed.
{
void *mem;
void *ptr;
// answer a) here
memset_16aligned(ptr, 0, 1024);
// answer b) here
}
Source: (StackOverflow)
I want to know how malloc
and free
work.
int main()
{
unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char));
memset(p,0,4);
strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes**
cout << p;
free(p); // Obvious Crash, but I need how it works and why crash.
cout << p;
return 0;
}
I would be really grateful if the answer is in depth at memory level, if it's possible.
Source: (StackOverflow)
How can I find the memory used on my Android application, programmatically?
I hope there is a way to do it. Plus, how do I get the free memory of the phone too?
Source: (StackOverflow)
I see in C++ there are multiple ways to allocate and free data and I understand that when you call malloc
you should call free
and when you use the new
operator you should pair with delete
and it is a mistake to mix the two (e.g. Calling free()
on something that was created with the new
operator), but I'm not clear on when I should use malloc
/ free
and when I should use new
/ delete
in my real world programs.
If you're a C++ expert, please let me know any rules of thumb or conventions you follow in this regard.
Source: (StackOverflow)
A simple test app:
cout << new int[0] << endl;
outputs:
0x876c0b8
So it looks like it works. What does the standard say about this? Is it always legal to "allocate" empty block of memory?
Source: (StackOverflow)
Is there a tool that will run a command-line and report how much RAM was used total?
I'm imagining something analogous to /usr/bin/time
Source: (StackOverflow)
When you create an instance of a class with the new
operator, memory gets allocated on the heap. When you create an instance of a struct with the new
operator where does the memory get allocated, on the heap or on the stack ?
Source: (StackOverflow)
As someone that's new to Objective-C can someone give me an overview of the retain, assign, copy and any others I'm missing, that follow the @property directive? What are they doing and why would I want to use one over another?
Source: (StackOverflow)
I want to know the memory usage of my Python application and specifically want to know what code blocks/portions or objects are consuming most memory.
Google search shows a commercial one is Python Memory Validator.
And open source ones are PySizer and Heapy.
I haven't tried anyone, so I wanted to know which one is the best considering:
Gives most details.
I have to do least or no changes to my code.
Source: (StackOverflow)
Programming language books explain that value types are created on the stack, and reference types are created on the heap, without explaining what these two things are. I haven't read a clear explanation of this. I understand what a stack is, but where and what are they (physically in a real computer's memory)?
- To what extent are they controlled by the OS or language runtime?
- What is their scope?
- What determines the size of each of them?
- What makes one faster?
Source: (StackOverflow)
Here is the extract from the program in question. The matrix img[][]
has the size SIZE×SIZE, and is initialized at:
img[j][i] = 2 * j + i
Then, you make a matrix res[][]
, and each field in here is made to be the average of the 9 fields around it in the img matrix. The border is left at 0 for simplicity.
for(i=1;i<SIZE-1;i++)
for(j=1;j<SIZE-1;j++) {
res[j][i]=0;
for(k=-1;k<2;k++)
for(l=-1;l<2;l++)
res[j][i] += img[j+l][i+k];
res[j][i] /= 9;
}
That's all there's to the program. For completeness' sake, here is what comes before. No code comes after. As you can see, it's just initialization.
#define SIZE 8192
float img[SIZE][SIZE]; // input image
float res[SIZE][SIZE]; //result of mean filter
int i,j,k,l;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
img[j][i] = (2*j+i)%8196;
Basically, this program is slow when SIZE is a multiple of 2048, e.g. the execution times:
SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
The compiler is GCC.
From what I know, this is because of memory management, but I don't really know too much about that subject, which is why I'm asking here.
Also how to fix this would be nice, but if someone could explain these execution times I'd already be happy enough.
I already know of malloc/free, but the problem is not amount of memory used, it's merely execution time, so I don't know how that would help.
Source: (StackOverflow)