|
I was not referring to the parameter passing, but to the need for swapping gigabytes of data in-place instead of swapping pointers to buffers, which seems like the most obvious choice in most cases.
You make very good points in your post. Thanks for that.
|
|
|
|
|
i think its a homework question.
|
|
|
|
|
Using Ruby:
x, y = y, x
Try not to take life to seriously.
When all is done no one gets out alive anyway.
|
|
|
|
|
Use the processor registers. No temp variable involved. Use assembly language of your choice.
Fast! 4 CPU instructions w/4 memory waits & you're done!
int x = 150;
int y = 45;
asm{
LDA x;
LDB y;
STA y;
STB x;
}
Using XOR, do it 3 times slower...
11 CPU instructions w/7 memory waits
int x = 150;
int y = 45;
x ^= y;
y ^= x;
x ^= y;
#DEFINE B 1
int x = 150;
int y = 45;
asm{
LDA x;
XOR y;
STA x;
STA B;
LDA y;
XOR B;
STA y;
STA B;
LDA x;
XOR B;
STA x;
}
Otherwise, this other SLOW method...
12 CPU instructions w/6 memory waits
x += y;
y = x - y;
x -= y;
#DEFINE B 1
int x = 150;
int y = 45;
asm{
LDA x;
LDB y;
ADA B;
STA x;
CMB;
INB;
ADA B;
STA y;
CMA;
INA;
ADA x;
STA x;
}
Notes for the unknowing:
Operations on registers are much faster than memory access
Negating a number is two's complement
Two's complement is one's complement +1
One's complement reverses (NOTs) all bits
Who loves Assembler???
No JITCHIT either.
Gary
|
|
|
|
|
Is this in the "Homework help" section? the only time i've ever needed to do this was CompSci 221. haha.
|
|
|
|
|
These kinds of interview questions are rather silly. Now really: what does it prove or show? Maybe that you know how to perform the swap using some weird trick, but as far as your abilities i.t.o. software design it shows nought.
It will not work on strings, anyway.
|
|
|
|
|
int x = 450;
int y = 45;
Console.WriteLine("X = " + y);
Console.WriteLine("Y = " + x);
If you ask me, this fulfils the spec.
Edit: oh and this works with strings, numbers, pointers (well maybe not if it's C#), or any datatype at all really.
Ninja (the Nerd)
Confused? You will be...
|
|
|
|
|
You should be aware of the XCHG assembler instruction which will exchange two values, uses 3 cpu clocks. Your optimizations will, in some cases, use 3x more CPU clocks, larger binary and unreadable code.
|
|
|
|
|
<joke>
to avoid using temporary storage - i would consider showing the user two boxes, and asking them to swap the numbers for me. this is safe for strings or XML or whatever. if the user chooses to use Notepad or something, it doesn't bother me, but i know that my code executes as fast as possible and is bug-free because i am using natural techniques from nature.
microsoft does this when you have to change your password. it shows you three text boxes. the first is your old password, and the next two are your new password. the code first checks that the new password matches the new new password, and then swaps the new new password for the old password.
works seamless every time
|
|
|
|
|
x^=y;
y^=x;
x^=y;
Yes, it's cute, but it's faster to use a temporary. The xor method is only useful if you're doing it in assembly language and you don't have a free register or a temporary memory location.
ken@kasajian.com / www.kasajian.com
|
|
|
|
|
int x=150;
int y=45;
x=x+y;(195)
y=x-y;(150)
x=x-y;(45)
|
|
|
|
|
x = 15
y =13
x=x + y (15 + 13) = 28
y = x- y (28-13) = 15
x = x-y(28-15)
x = 13
Hence x=13;
y=15.
jigar sheth
|
|
|
|
|
hello guys.....im new to this. I wanna know that how can I get started with waveInOpen?? I am getting confused. What is the right path to get used to it. I just can not be happy taking samples from Internet, I must learn it but not taking it on the big picture, what is the right place.......plz plz help me.
|
|
|
|
|
|
Hi,
i m taking help of this article for design outlook style
Outlookbar-style menu interface[^]
i m using COutlook2Ctrl::OCL_SELECT for trigger with assign Menu Item,in menu item this is disable by CCmdUI,
but please tell me how can i disable this purticular subitem in this outlook tree.
please help me for this.
thanks in advance.
|
|
|
|
|
Generally,singleton pattern is applied by the way that the ctor is private and gives a member funtion named getInstance, but CWinApp's instance is defined as a global object,its ctor is not private.So how MFC realizes the singleton pattern for CWinApp?
|
|
|
|
|
The CWinApp class is not a singleton class.
It doesn't need to be because MFC needs this class has to be created before it internally calls WinMain .
If it was designed as a singleton, you would be able to create it only after WinMain in called and also you would need to write WinMain yourself.
That is why you create a global instance of it and you must create only one as the documentation says.
This is as easy as saying that you can only have one main or WinMain function.
|
|
|
|
|
I Made a test .If i instance another global CWinApp descendant class.In release mode ,there is only one instance in the application ,but not two.How does MFC keep only one CWinApp descendant instance in the application?
|
|
|
|
|
This works in Release mode because the ASSERT macro has no effect in Release mode.
MFC maintains several global functions whose begin with Afx and several global variables whose names begin with _afx .
These are the variables that are used to invoke the various methods in the code.
These variables will be overwritten by the second instance of CWinApp .
So only the last instance of CWinApp will be the valid object.
All the rest will simply occupy space in memory.
|
|
|
|
|
wonderful!I got it ,thank you!
|
|
|
|
|
I recently created a driver installation program, which uses a number of core functions such as UpdateDriverforPlugAndDevice(), using vs2008, in 32-bit operating system everything is working properly. But win32 program can run in x64, but under x64 it does not work. For example UpdateDriverForPlugandPlayDevices() raises an error, I used GetLastError (), and I see an error code. Later I was using a 64-bit system with vs2008 and compiled the x64 program, everything works fine, but the program can not run in win32. The problem is now solved, but I now maintain two versions of the installer 32 and 64; I do not know what a better way, I just run a seperate version of the executable.
|
|
|
|
|
When 32-bit apps try to access certain folders or registry keys in a 64-bit environment, they will be redirected to another path.
For example, drivers are normally copied to C:\Windows\System32\drivers .
When a 32-bit app tries to copy a driver to this location, it will redirected to C:\Windows\SysWOW64\drivers .
This is probably what is going on in you case and so you will have to maintain 2 separate versions of your installer program.
|
|
|
|
|
I get a crash on a Windows Message!
Looked it up in WinUser.h and didn't find anything for it.
This is the MSG number 274.
As it appears when I press close on my Window, my program is receiving a WM_SYSCOMMAND.
This is totally a new thing, I already have a WM_CLOSE.
Can't understand what is triggering it.
modified on Wednesday, July 21, 2010 9:04 PM
|
|
|
|
|
WM_CLOSE is not the last message that an application will receive.
This is normal.
But why is that causing a crash for you?
Perhaps, you could debug after it crashes.
|
|
|
|
|
kindly let us know,Is crash is appearing in Debug Mode or release mode!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|