I want to find the size of the total memory allocated on the heap for the following statement:
int* a = new int[1000];How can I use the sizeof operator for this?
I used:
printf("\t===> %d\n",sizeof(*a));

Is this statement correct?

I have asked the question because when I checked the memory of heap allocated in windbg it shows me the size as fc4 i.e. 4036 which is more then 4000 and not as desired. Any hint as to what may be the cause?

I want to find the size of the total memory allocated on the heap for the following statement:
int* a = new int[1000];How can I use the sizeof operator for this?
I used:
printf("\t===> %d\n",sizeof(*a));Is this statement correct?

I want to find the size of the total memory allocated on the heap for the following statement:
int* a = new int[1000];How can I use the sizeof operator for this?
I used:
printf("\t===> %d\n",sizeof(*a));

Is this statement correct?

I have asked the question because when I checked the memory of heap allocated in windbg it shows me the size as fc4 i.e. 4036 which is more then 4000 and not as desired. Any hint as to what may be the cause?

The statement is not correct, you'll get the size of an int on your architecture.

windbg... hmm... that's doesn't sound really Un*x...

Remember that new[] is an operator provided by your compiler, we don't know what it does... It may for instance add a header for internal bookkeeping; or perhaps the underlying allocation mechanism on your system imposed this... Who knows?

You'll have to look at the interna of the new[] operator to find it out.

This will not take memory from heap. This would be allocated from stack because this is a local variable and you aren't using malloc() / any alloc() functions.

Quote:

Originally Posted by rupeshkp728

hey kumaran in C++ new is used in place of malloc of C and so the memory will be allocated from heap.

I know very little about C++. The following comment is not intended to address the original poster's issue. It's just a brief response to what seems to be a tendency to equate malloc'd memory with the heap.

malloc is not required to allocate from the heap. In fact, quite a few implementations may not do so. Some use mmap exclusively (e.g. OpenBSD). Some may use sbrk for some allocations and mmap for others (e.g. Linux (glibc), FreeBSD).

@aliter ,
Thanks for the information, that's definitely going to be a direction, I'll need to investigate a bit further for my own shake.

To sum up, do you mean to say, in other words, that it's the implementation of heap which is going to be different in different systems?

That's what I'm aware of and most logical thing to conclude of when two operating systems are developed altogether differently and separately.

Also its never the compiler which actually allocates these heap related object/variables rather the OS memory manager allocates them at the run time only.

Its perfectly okey to have different implementations of the actual resident memory area of a heap based variables. The running process (which owns these variables) just treat them at a memory location that's always upper bound and assumes such memory area altogether grows outwards (the stack grows in the direction opposite to the heap, which is inwards).

The whole thing could also be implemented as to simulate this behavior and that's what many virtual memory implementations do.

Not only that, the whole process memory area could altogether be implemented differently (over different platforms) but they give the same feeling to the running process by exposing similar interfaces and response from the operating platform the process is executing on.

Your information was important to me more because of the fact you have clubbed FreeBSD & Linux implementations together.