Just because you free memory doesn't mean it doesn't exist anymore. It depends on the OS and the heap. For example, heaps often cache blocks that have just been free to be recycled if a compatible request comes in soon after. Let your heap do its thing and trust in its wisdom.
But if u want to write something that exception is generate.
That's not necessarily true. For example, on x86 Windows the CPU, and therefore the OS, can only map memory around in 4K chunks. Another way of saying this is that on Windows (x86) the page size is 4K. This means that if you use a low level memory allocation function (like VirtualAlloc) the minimum allocation size is 4K. Getting around this limitation is one of the main functions of the heap (whether it's the Win32 heap accessed with functions like HeapAlloc or a custom heap layered over HeapAlloc or implemented in terms of VirualAlloc). When you attempt a small allocation from a heap (less then 4K on Windows) the heap gets a page of memory (if it hasn't already gone one handy) and hands you part of it. If another small allocation occurs it will hand out another piece of this same page (or some other partially used page) until the whole page is full and then it will get another page and start over. In short, just because you free some memory from a heap doesn’t mean the page that contains that address is freed as other allocations may reside in the same page: only when all allocations on a particular page are freed can the heap release the physical memory (and it may still not do so straight away). The OS can’t efficiently arrange for an exception to be generated when you access the unused part of a page as the underlying hardware only supports setting the memory protection attributes for a whole page. The real situation is even more complex than this brief description: for example the heap can recycle a heap block (and thus not free it) even when it contains no allocations as a form of caching and it need not change the protection on the page (so an exception is generated on access) as doing so means a context switch to Ring-0 and then another back to Ring-3.
I'm a beginner.I'm working MFC and use Static Control to show texts.But the frame of Static is too small, the texts are so much to show in the frame .
Have everybody anyway to show all texts without change the frame size and Font size ? . I uesed Vertical Scroll Bar but I don't know how to do it.
Please Help me ! thanks
The first , I tried with Edit Box , but I want to use Font, colour and Font size . Because i 'm a beginner so I don't known to change Font , colour and Font size in Edit box .
If you know how to , Please show to me ! thanks
How dO I decide waht is the timer identifier(the first parameter) number in SetTimer function?
It should be a nonzero number, but is there any condition that determines this number?
or can i give any number from 1 to anything?
It can be anything you want. Typically, you would define or declare a constant symbol for it somewhere. This is your nIDEvent that you use during OnTimer events to figure out which timer is going off and when you KillTimer().
I need to be able to read & write to a PCI Digital Input/Output card, and i'm going to be using VC++ 6.0/MFC on a WinXP machine to accomplish this. If I am correct, I believe Windows will not allow direct communication to an I/O port...The manual that came with the card (no software drivers) had some programming examples in which 'outportb' & 'inportb' function calls were used to write and read data respectively...but unfortunately these functions are not recognized by vc++.
Could someone tell me if I am missing any library files that I need to include?
In any current version of windows (2K,XP,...) this is a statement that is not allowed by the operating system. There are two ways around this either write a device driver or use one of the open port device drivers that are available on the net. Sorry, I can not think of a link right now.
The only problem I remember is that the documentation was not clear regarding data size. I think that it does 8-bit inputs and outputs, so if you want to read a 16-bit value, you have to read from an odd port and from an even port, shift one byte by 8, and add, etc. And if you want to write a 16-bit value, you have to split it to two 8-bit outport32 calls.
For example, if you want to read a 16-bit status from port 0x302: