У меня есть блок памяти, который разделен на серию местоположений, которые могут быть получены и возвращены клиентским кодом.
Метод, который возвращает местоположения назад, выглядит следующим образом:
void ReturnLocation(void *address) {
int location = AddressToLocation(address); // I need the location here
// some code
DoSmthA(location);
}
void DoSmthA(int location) {
// I need the address, but also the location
void *address = LocationToAddress(location);
// do something with the address
DoSmthB(location);
}
void DoSmthB(int location) {
// Again, I need the address, but also the location
void *address = LocationToAddress(location);
// do something with the address
DoSmthC(location); // It may go on this way...
}
// ------------------------------------------------------
void* LocationToAddress(int location)
{
return (void *)((char *)this + HEADER_SIZE + (location * LocationSize));
}
int AddressToLocation(void *address)
{
return (int)(((__int64)address - HEADER_SIZE - (__int64)this) / LocationSize);
}
У меня такой вопрос: я должен передавать только местоположение вспомогательным методам, или он будет проходить быстрее каждый раз, когда адрес тоже (и не вычислять его снова и снова):
void DoSmthA(int location, void *address) { }
или даже лучше использовать такую структуру:
struct LocationInfo { int Location; void *Address; };
void DoSmthA(LocationInfo locInfo) { }
Этот метод может вызываться миллион раз, и я не уверен, что операции по вычислению адреса из местоположения (два сложения и одно умножение) выполняются быстрее или медленнее, чем передача второго параметра, содержащего адрес.
Заранее спасибо!