|
Thanks cmk,
Could you help to show some practical usage of creating private heap please?
regards,
George
|
|
|
|
|
2. A process needs a heap to allocate dynamic things (e.g. malloc function, and new keyword).
1. When a process exits, it must release its memory. How could it release memory that
contains its heap intertwined with some other processes heap?
3. no, see 1.
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- use PRE tags to preserve formatting when showing multi-line code snippets
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Thanks Luc,
Could you help to show some practical usage of creating private heap please?
regards,
George
|
|
|
|
|
Hi,
Having more than one heap may improve the memory situation (less fragmentation)
and the performance.
PERFORMANCE
You could take advantage of a private heap like this:
- create a private heap
- allocate a lot of objects on that heap
- when done, rather than freeing each of these objects, and then the heap itself,
you can free the heap directly without caring about the objects it contains; this of course
assumes you don't need the objects any longer.
FRAGMENTATION
Example: a program needs a lot of type1 objects for a long time and a lot of type2 objects
for a short time; these objects are created at the same time.
First scenario: using a single heap the objects would get interleaved somehow, so freeing the type2 objects would leave the one heap fragmented, effecively not yielding free memory pages
at all.
Second scenario: allocating type1 objects on heap1 and type2 objects on heap2, when done
with type2, heap2 can be freed, effectively freeing all its memory pages whereas heap1
continues to be used (with less, at best no, fragmentation).
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips:
- use PRE tags to preserve formatting when showing multi-line code snippets
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Thanks Luc,
Practical and excellenet!
regards,
George
|
|
|
|
|
hi all, i wanted to simulate pressing ALT by keybd_event() but i dont know the code , or if it is a virtual key. does any1 know code or virtual_key value?
thnx
|
|
|
|
|
WM_SYSKEYDOWN.If u use it in PreTranslateMessage:
BOOL CTest::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_SYSKEYDOWN && pMsg->wParam == VK_..something..)
{
// TO DO:....
}
return CDialog::PreTranslateMessage(pMsg);
}
|
|
|
|
|
lol,i wanted the something in "VK_something" , my question's answer is : the alt code is (for example) VK_ALT ! or something like that , i know how to get other keys like VK_Shift , but there is nothing about ALT key in my book
|
|
|
|
|
I answered WM_SYSKEYDOWN if you use it in PreTranslateMessage, not VK_something. But you want to simulate.
-- modified at 6:43 Saturday 10th November, 2007
|
|
|
|
|
i want to press the alt not to check if it is pressed or not .
thnx , V_shr
|
|
|
|
|
use this: keybd_event(VK_MENU,0xb8,0,0);
|
|
|
|
|
Don't forget to release the ALT key with :
keybd_event(VK_MENU,0xb8,KEYEVENTF_KEYUP,0);
|
|
|
|
|
thanks a LOT
|
|
|
|
|
Hello everyone,
I am just interested in the following sample, how compiler maps one dimensional int pointer array to two dimensional int array so perfect. E.g. p [3][3] maps to the 33th element and p [0][9] maps to the 9th element.
How does the compiler do the internal mapping of one dimensional int pointer array (variable p) and the two dimensional int array (variable buffer)?
<br />
int main (int argc, char** argv)<br />
{<br />
<br />
int (*p) [10];<br />
int buffer [10][10];<br />
int tmp;<br />
int i = 0;<br />
int j = 0;<br />
<br />
for (i = 0; i < 10; i++)<br />
{<br />
for (j = 0; j < 10; j++)<br />
{<br />
buffer [i][j] = i * 10 + j;<br />
}<br />
}<br />
<br />
p = &buffer;<br />
<br />
tmp = p [3][3];
<br />
tmp = p [0][9];
<br />
return 0;<br />
}<br />
thanks in advance,
George
|
|
|
|
|
sorry to say that, right now, i donot have any idea on this post,
but how about your algorithm to get 1000 largest values? any good news?
here i have implemented the algorithm as i suggested, using linked lists.
it took 30 seconds to sort 10 crore samples.
do you want me to share it?
or have you got a better idea to implement it.
|
|
|
|
|
|
how much time does your nth element logic take to sort the elements?
|
|
|
|
|
Hi chandu004,
chandu004 wrote: how much time
How much time you mean the elapsed time of one invocation of nth_element or how many times I invoke function nth_element?
regards,
George
|
|
|
|
|
time to take out top 1000 elements from 10 crore elements.
|
|
|
|
|
Thanks for your interest and attention, chandu004.
I will tell you the result when I complete the draft coding, currently I am writing the parser to read data into memory.
regards,
George
|
|
|
|
|
i have put my algorithm here
[^]
please refer it.
--------------------------------------------
Suggestion to the members:
Please prefix your main thread subject with [SOLVED] if it is solved.
thanks.
chandu.
|
|
|
|
|
Cool chandu,
I must study your code and post my code when I complete the parser code.
regards,
George
|
|
|
|
|
The compiler does it the same way you do when you initialize the
array.
A pointer to the indexed array element is formed by multiplying the indexes
by the associated array dimension(s). In your example, to get the
value in the array at p[x][y], the compiler creates code to calculate
a pointer to the value
tmp = p [x][y];
ptrtovalue = ptrtoarraystart + ((x * arraydimension1 + y) * sizeof(int))
tmp is asigned the int found at ptrtovalue
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
i feel a subsequent question is close... may I vote you 3 too ?!
|
|
|
|
|
toxcct wrote: may I vote you 3 too ?
I think I deserve a 3.17!
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|