|
Hello everyone,
I have tried that even if I have multiple character pointer variables, if the content they pointed to are the same, they are allocated with the same value. So, I think from compiler point of view, the constant with the same content shares the single copy in memory?
Here is my test program in Visual Studio 2005.
<br />
<br />
int main (int argc, char** argv)<br />
{<br />
char* abc = "Hello";<br />
<br />
char* abc2 = "Hello";<br />
<br />
<br />
return 0;<br />
}<br />
thanks in advance,
George
-- modified at 2:28 Thursday 15th November, 2007
|
|
|
|
|
That is a compiler optimization that you shouldnt rely on. /Gf on the compiler commandline tells the compiler to "place a single copy of identical strings into the executable file" and /GF "the pooled strings are placed in read-only memory".
|
|
|
|
|
Thanks Roger,
I have checked that I do not have /Gf defined. Here is project --> properties --> C/C++ --> Command line --> All options,
/Od /D "_MBCS" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Wp64 /ZI /TP /errorReport:prompt
Any more comments?
I am using .c other .cpp in this case.
regards,
George
|
|
|
|
|
/ZI = Program Database for Edit & Continue, in this case /GF becomes the default
|
|
|
|
|
Thanks Roger,
My question is answered.
regards,
George
|
|
|
|
|
George-so-good-you-named-yourself-twice,
As has been said, the answer depends on compiler flags. But I would strongly pretend to yourself that the answer is impossible to know, and not depend on it.
If you want two pointers to the same place, be explicit about it. Or some person who changes your code in three years (ie, you) will have no idea you intended them to be the same, and will break things.
Or you will upgrade to Visual Studio 2020 (in the year 2012) and the compiler will do different things and you'll get nasty to find bugs.
To save this you'll have to write more comments than the effort is worth.
Iain.
|
|
|
|
|
Thanks for your advice, Iain!
I agree that your idea will make code more safe and conforming to standard -- by not assuming any non-language-standard points.
regards,
George
|
|
|
|
|
Hi ALL,
Can please anyone give me the code in vc++ to calculate FFT?I have the gray values of the image as input in array form.
Please help me.I really need it ASAP.I would really appreciate it.
Thanks & Regards
|
|
|
|
|
The forum usually is to ask questions, I don't think the people here is going to give ready codes without questions. Have you at least used google to search? Most probably there will somewhere be available code to do that.
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
raavn wrote: I really need it ASAP.
Asking for free help and wanting it ASAP is rude. You are abusive in my opinion.
|
|
|
|
|
Please do not take it in negative sense.
I was really in need of it.
If you would be in such a need,then only you can understand.
|
|
|
|
|
We understand it, but you don't understand, that the "high level" users (and I'm not including me, I'm just a bit more than a begginer), that most of times help answering the questions, are pissed off about ASAP, URGENT, and such expressions, the first message of all (Chris Maunders) is there for a very clear reason.
On the other hand, if someone reads your message and knows the answer you will have it. If not... you won't have it. Is pretty useless that you write ASAP, it depends on when your message is read, if the reader knows the answer, if your message don't annoy the reader avoiding the answer and many other factors.
And as you can see below... If you just need code or examples about something, Google can sometimes do miracles. Other question is if you don't understand something, then you will logically have to ask.
BTW and for your info... The most of the URGENT, VERY NEEDED, ASAP and so on, is from people that left the work for the last moment and, then, OOOOHHHH the world is ending, I don't know how to continue.
Just a few % of the urgent questions, are things not depending on the asker. It maybe is not right, that innocent people pays for the errors of the others...
but as you ask to be understood in your hurry, this is to make you understand the other side. And the reason for some comments.
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
|
Have you tried searching google?
http://www.google.com/search?hl=en&q=c+source+code+fft&btnG=Search
Or even a website where there are many articles using code?
http://www.codeproject.com/info/search.asp then type in fft. Lot's of articles there...
Iain.
|
|
|
|
|
Thanks for replying.
I am really very thankful to you all.
|
|
|
|
|
raavn wrote: Can please anyone give me the code in vc++ to calculate FFT?
Nope.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
|
|
|
|
|
hi all,
I have a struct define as follows, defines on the 32bit machine.
<br />
struct pac_cont <br />
{<br />
unsigned int des_list; <br />
unsigned int mem_ID; <br />
unsigned char dm_con; <br />
unsigned char ser_ID; <br />
unsigned short act; <br />
};<br />
This is one of very important part of my application, and I want to keep this structure as it is on any windows system without any issue. So I think it is better to use Windows Data Types. I defined it as follows.
<br />
struct pac_cont<br />
{<br />
DWORD32 des_list; <br />
DWORD32 mem_ID; <br />
CHAR dm_cont; <br />
CHAR ser_ID; <br />
SHORT act; <br />
};<br />
Is it correct.
I appreciate your help all the time...
Eranga
|
|
|
|
|
Surely this is going to depend on how your headers typedef them, specifically winnt.h and basetsd.h, and how your compiler interprets the inbuilt types? Once your code is compiled the windows system on which your code is used wont make any difference. Even if you change the structure as you propose and use it with a 32bit compiler and then later port your code to a 64 bit compiler, you will still have to check that the typedefs havent changed and that the inbuilt types are the same as before, also you will have to check that default structure packing hasnt changed.
Ohh and current headers "typedef short SHORT;" so your act member has changed type already.
|
|
|
|
|
Roger Broomfield wrote: Ohh and current headers "typedef short SHORT;" so your act member has changed type already.
I'm not clear what you say.
I appreciate your help all the time...
Eranga
|
|
|
|
|
unsigned short != short
so...
unsigned short != SHORT
so...
you have already change the type of the datas using SHORT
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
That mean, I can't change unsigned short act; as SHORT act;
Ok, I think I have to read more about this.
I appreciate your help all the time...
Eranga
|
|
|
|
|
You can, but you will already have a change of the typ. If you DO need a unsigned short... then you can not use SHORT. At least that is what I guess after reading Roger's answer
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
Hmmm,
Anyhow I have to use unsigned char, to keep the struct variables sizes. Otherwise the application gives wrong output.
I appreciate your help all the time...
Eranga
|
|
|
|
|
then... why dont you make your own typedef? I think unsigned short is standard and portable to all platforms. About the other types... read the answers below, they speak with more knowledge than me
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
There is no such thing as Windows Data Types.
There are only the c++ data types (when working in c++ ) which are
char, short, int, long, long long. All of them can be signed, unsigned or undefined (which means signed).
char = 1 byte ( 8 bit)
short = 2 byte (16 bit)
long = 4 byte (32 bit)
long long = 8 byte (64 bit)
int = natural size of adressing on 32 bit platforms this will be 4 byte. on other platforms this could be smaller or larger. Alsoo this size can change from compiler to compiler. Apperantly MS has defined that a int will always be 32 bit.
From basetsd.h
typedef unsigned int ULONG32, *PULONG32;
typedef unsigned int DWORD32, *PDWORD32;
When using struct especialy use known size type, which means never use int! That way this piece of code can work cross-platform, cross-compiler.
codito ergo sum
|
|
|
|