|
At one place I worked the company policy was to use memcpy where possible. Hopefully the compiler had an optimized version of memcpy for the platform and if not we could get someone to write one in assembly. It was supposed to be faster in most cases than a for loop, but the actual speed difference will depend on the individual compiler and how it optimizes the code.
|
|
|
|
|
memcpy is way faster, because the compiler will change it for a few specific processor instructions (see "#pragma intrinsic" on MSDN).
But sometimes it can bite you, specially on templates: if you are working on C++, memcpy can corrupt your data, because a loop array copy routine must call copy constructors and assignment operators to do its work.
It's not the fall that kills you: it's the sudden stop - Down by Law, Jim Jamursch (1986)
|
|
|
|
|
Hi,
I meant using memcpy on primitive data types only. But I guess it is way faster than a for loop.
Pankaj
Without struggle, there is no progress
|
|
|
|
|
In all likelihood, memcpy is probably faster. A 'for' loop would invariably involve many, many invidual memory accesses (reads and writes) to various addresses. Just loading those addresses in registers for each loop iteration will be a lot slower than a raw memcpy.
However, you're not specifying what type of arrays you have...if they contain strings, structs, or anything using pointers, memcpy won't replicate the data being referenced; you'll only get copies of the pointers. In that case, if you then destroy the original array, your copy's pointers will now be pointing an invalid addresses.
|
|
|
|
|
> if you then destroy the original array, your copy's pointers will
> now be pointing an invalid addresses.
...by "destroying the original array", I meant "including any data referenced by any pointer it contains".
|
|
|
|
|
memcpy, without a doubt. it's much faster to copy data 32-bits at a time, than one BYTE at a time, or one sizeof(CMyObject) at a time; and it's even faster when that data is aligned on DWORD boundaries. memcpy takes both of these into account.
i needed a function to do a bitwise inverse of a buffer. i wrote one as a simple for loop and one that operated on 32 bit values, aligned on 32-bit boundaries. the difference was significant (the optimized routine took less than 15% of the time that the simple for loop did).
int z;
BYTE *pb = pBuf;
UINT32 uLeadUp = (DWORD)pBuf & 0x03;
for (z=0;z < uLeadUp;z++)
{
*pb = ~(*pb);
pb++;
}
uLen-=uLeadUp;
UINT32 dwords = uLen / 4;
UINT32 leftovers = uLen % 4;
DWORD *p = (DWORD*)pb;
for (z=0;z < dwords;z++)
{
*p = ~(*p);
p++;
}
pb+=4;
for (z=0;z < leftovers;z++)
{
pb[z] = ~pb[z];
}
-c
Image tools: ThumbNailer, Bobber, TIFFAssembler
|
|
|
|
|
I remember when this came up.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
i tried to link back to the original thread, but the link (via Copy Shortcut) took me to some totally unrelated discussion...
-c
Image tools: ThumbNailer, Bobber, TIFFAssembler
|
|
|
|
|
Thanks for the explanation
Pankaj
|
|
|
|
|
Is anyone aware of thrid-party applns to create help files for C++-generated software? I'm using the bundled system with VC++ 6.0, but that is not doing the trick. Thx,
Ralf.
ralf.riedel@usm.edu
|
|
|
|
|
Hello
Can anyone help me by telling how can I insert a Word or WordViewer in my own document that should look like a normal CView-derived window on the screen.
Any advice would help.
Thank you in advance
|
|
|
|
|
I'm work with a VC++ project made as:
- Single document
- Doc/View model
- CView: public CFormView
.. so I have a form used in the main view of my
application...
Is it possible to change, in runtime, the form
shown in the view ???
What have I to do in order to make this operation ???
Thanks a lot !!!
|
|
|
|
|
Use CFrameWnd::CreateView to create a new view for the frame.
|
|
|
|
|
I am trying to create a CEdit dynamically, and placing it in a CPropertyPage. What I end up with is a CEdit with what I think is the large system font, and no 3D border. Here's how I'm creating it (I used the same settings as other CEdit's not created dynamically):
<br />
m_pOctalEdit->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_NUMBER,rect,<br />
GetParent(),OCTAL_EDIT);<br />
m_pOctalEdit->ModifyStyleEx(0,WS_EX_CLIENTEDGE | WS_EX_NOPARENTNOTIFY);<br />
Any idea why the 3D border is not there, and the font is different?
Thank you for your help.
|
|
|
|
|
m_pOctalEdit->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_NUMBER,rect,
GetParent(), OCTAL_EDIT);
1. What's that? Whose parent shoud be a parent of your editbox?
2. Use ModifyStyleEx(0, WS_EX_CLIENTEDGE | WS_EX_NOPARENTNOTIFY, SWP_DRAWFRAME | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
and remove WS_VISIBLE style from Create.
3. I think that the much better approach is to create edit control with CreateEx, so you can specify extended window styles upon creation.
4. To show a correct font - get parent's font and set it to the control window.
|
|
|
|
|
Thank you for the reply. It looks like the SWP_DRAWFRAME is waht I was missing.
To answer your question, the GetParent() will return the CPropertyPage (as mentioned in the initial posting).
Thanks again,
Dave
|
|
|
|
|
Regarding to GetParent, in member of what class are you calling to CEdit::Create?
|
|
|
|
|
A CStatic derived class that is a child of the CPropertyPage.
Things are working fine now, thanks again.
|
|
|
|
|
When we use winAPI createprocess(),there is a parameter which we usarlly valued it as NULL so that the process inherit environment from parent.
Recently,I want to set a new environment block for the process I created.
but I don't know how to do it.
Could anyone help me?
leon studio
|
|
|
|
|
In ED (see sig) I use GetEnvironmentVariable() and SetEnvironmentVariable() before calling CreateProcess() and leave lpEnvironment = NULL.
Neville Franks, Author of ED for Windows. www.getsoft.com
Make money with our new Affilate program
|
|
|
|
|
Hello,
I have a RichEdit SDI, right now people can drag and drop text into the control (and thats what I want).. but I don't want people to be able to drag and drop files nor do I want them to be able to drop images into the rich edit control. How can I stop files and Images from being dropped into the control?? Any Ideas?
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
Read Ole Drag and Drop articles in MSDN. You can receive notification with a type of droped source.
|
|
|
|
|
I've been searching and searching (MSDN, Yahoo, Google).. I can't find much.. Do you have any links handy?
Thanks,
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
Look the MSDN help on CRichEditView::QueryAcceptData. Did it solve your problem?
|
|
|
|
|
Am I misinterpreting this? I have an MDI View that I do a DestroyWindow() on. I had thought that when I do this, the member of the view being destroyed (pmyView->someVariable) would be cleared (and destroyed) as well.......but MSDN says it doesnt destroy the object. SO after destroyWindow() I can still do:
pMyView->someVariable = 7; ???????s since the object stil exists....
It seems wrong but MSDN says the object doesnt get destroyed. SO then if I wanted the myView to 'reset' I would have to go set its members to zero etc, for a fresh start manually?
Appreciate your help,
ns
|
|
|
|