Lightening fast answer :P
Quote:
Quote:
Let me know if I understood something: 1. Shrinking code would matter because smaller code is stored on faster memories. (link) Quote:
Is this right? Quote:
Skuzye |
Quote:
I didn't mean to imply you should routinely take that into account when coding. You shouldn't. But you seemed to want to know what would be better when you think about the possibility that lots of tiny differences might add up to a significant difference. Then the code size for using char local variables vs. int local variables might add up to something that matters. The data size difference won't. Quote:
On the stack, the data storage size difference between a char and an int usually makes less difference than when stored elsewhere in memory. More often than not, it makes no difference. When stored in a register it is near certain that the data storage size makes no difference (the rest of that register won't be used for anythig else anyway). So even when you care about tiny differences (such as the possible code size difference) which you usually shouldn't care about, you still shouldn't care about the strage space fscalar local variables. Quote:
|
Thanks a lot!
Quote:
Well I guess this is enough for this thread if you don't mind. I can't see how to go further, although if you have any indications of websites or book I'd appreciate. Skuzye |
A couple of suggestions, sorry I didn't post them earlier but they didn't came to mind then:
First, avoid using #define when dealing with constants. Use const typename for that. const gives your compiler a chance to check for type compatibility and it is also useful to avoid errors like the one you've experienced. #define is useful when you want to write portable code, for example: Code:
#ifdef PLATFORM == WINDOWS Instead, think of what will happen in case you use EVERY bit in your array (and not just the first from every element). Thus, the 0-th bit of x[0] will store weather 0 is located in the list or not; the 1-st bit of x[0] will store info. about 1 ... the 7-th bit of x[0] will store info. about 7 Information about number 59412 will be stored on the fourth bit of x[7426]. Using this technique the total size drops 8 times, or sizeof(char), to a respectable value of 512MB of RAM. In case you were not familiar with this method, I suggest looking up 'bitsets' or 'bit arrays' (C++ has it's own bitset class, but I would stay away from that until I've understood them well). In case you already knew about bitsets... well sorry to take you time :P Maybe somebody else will benefit from it. Cheers! |
@agemo
Really interesting. I laughed when you said it would take 4GB of RAM, I can't even imagine such a result in a computer with less RAM than it (which isn't so rare, huh..hehe) I didn't know about it thank you, you didn't take my time :P |
Quote:
Quote:
Certainly in C++ there are such flaws. I always use enum when the constant I'm defining logically ought to be a const int (I've done that for so long, I've forgotten some of the flaws in const that made me start doing it) . C++ seems to have better support for enum and an enum can do all the things that a const int could have done. IIRC, const double is even more flawed in C++ language rules than const int and there is no similar work around. I still try hard to avoid needing to use #define, which is even more flawed. A scalar constant should be something you can define in a header file with the scoping benefits of whatever scope (typically a class definition) you want to give it. C++ doesn't work that way, which is a flaw in the language specification. #define ignores ordinary scoping rules and its scope is normally the rest of the compilation unit in which it was seen. That makes it even worse than the flawed rules for const typename. |
Quote:
Quote:
Quote:
Quote:
|
Quote:
C++ would be a better language (would let us write more effective and more maintainable programs) if constant class members could be defined within the class definition. |
Quote:
|
All times are GMT -5. The time now is 05:12 PM. |