[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
optimization
From: |
Manuel Guesdon |
Subject: |
optimization |
Date: |
Thu, 16 Dec 2004 14:05:50 +0100 (CET) |
Hi,
Would it be possible to add public declaration of boolN and boolY in Additions,
with something like this:
#ifdef NO_GNUSTEP
#define NSNumberYes [NSNumber numberWithBool:YES]
#define NSNumberNo [NSNumber numberWithBool:NO]
#else
#define NSNumberYes boolY //Or another name
#define NSNumberNo boolN //Or another name
#endif
So we won't have to call -numberWIthBool: each time we want a bool number.
Is it also possible to declare function wich use IMP for NSNumber
numberWithInt:,
numberWithFloat:,..
like this:
#ifdef NO_GNUSTEP
#define NSNumberWithInt(value) [NSNumber numberWithInt:value]
...
#else
#define NSNumberWithInt(value)
((*methodIMP)(NSNumberClass,NSNumberWithIntSelector,value))
...
#endif
This probably save a lot of objc_msgSend calls with no (?) drawbacks (except
poseAs: and dirty
class methods manipulations).
And my favorite one, a little more complex:
"How to store millions NSIntNumber in 0 byte space" :-)
Using objects to store int numbers can take a lot of memory (real value
storage+class
pointer+retain count,...) and cost allocation/deallocation/retain/release time
If we say that upper addressable memory won't be used (physicall memory will
be less than addressable memory).
Say we 'reserve' (not allocate) a zone of 1024x1024=intNb starting at (unsigned
char*)intBase
and stopping at (unsigned char*)intLimit in this zone
we could have:
NSNumber -numberWithInt:(int)value like this
{
if (value>=0 and value<intLimit)
return ((unsigned char*)value)+intBase;
else
{
usual allocation
}
}
and -(int)intValue like that:
{
if (self>=0 and self<intLimit)
return ((unsigned char*)self)-intBase;
else
{
usual allocation
}
}
we only have to modify NSNumber class to handle this case and some
other functions/macros (obj_msgSend,object_get_class,...).
cost: 2 tests in some functions
gain: no allocation/deallocation/retain/release and no physical memory
usage for the choosen int range
drawback(s): some tools can't check this memory and may report
errors.
What do you think ? Am I crazy ? :-)
Manuel
--
______________________________________________________________________
Manuel Guesdon - OXYMIUM <address@hidden>
14 rue Jean-Baptiste Clement - 93200 Saint-Denis - France
Tel: +33 1 4940 0999 - Fax: +33 1 4940 0998
- optimization,
Manuel Guesdon <=