C ++ что-то не так с этим кодом? - PullRequest
0 голосов
/ 01 января 2011

Я пытаюсь найти способ найти какое-то время наносекундного уровня для метода шифрования.Я нашел этот код в stackoverflow, и он, кажется, не компилируется в VS2010, но я не могу понять, почему.Ошибка с time = GetCpuClocks () и говорит «ошибка C3861: GetCpuClocks: идентификатор не найден», я не совсем понимаю, почему?У меня также была проблема с типом 'int32' в объявлении структуры.

(я предполагаю, что объявление 'time' как 'long' в порядке? Или это должно быть __int64?

Заранее спасибо

int _tmain(int argc, _TCHAR* argv[])
{
    __int64 time;
    time = GetCpuClocks();
}

inline __int64 GetCpuClocks() {      
    // Counter     
    struct { int32 low, high; } counter;      

    // Use RDTSC instruction to get clocks count     
    __asm push EAX     
    __asm push EDX    
    __asm __emit 0fh 
    __asm __emit 031h 

    // RDTSC     
    __asm mov counter.low, EAX     
    __asm mov counter.high, EDX     
    __asm pop EDX     
    __asm pop EAX      

    // Return result     

    return *(__int64 *)(&counter);  
}

Ответы [ 4 ]

6 голосов
/ 01 января 2011

поставь подпись НАД твоим основным

__int64 GetCpuClocks();
2 голосов
/ 01 января 2011

Вам нужно добавить двух типов недочетов в тип данных: __int32

Причина, по которой вам нужно использовать 32-разрядные целые числа, состоит в том, что команды ASM используют 32-разрядные регистры, и, следовательно, 32-разрядные целые числа намного быстрее копируются, чем одно 64-разрядное целое число. Приведение в операторе возврата объединяет два 32-разрядных целых числа в конечный 64-разрядный результат с небольшим дополнительным временем или без него.

Причина использования __int32 и __int64 вместо int и long заключается в том, что __int32 / 64 имеют универсально заданные размеры, тогда как short, int и long технически имеют переменные размеры в зависимости от компилятора и архитектуры платформы.

(Конечно, вы уже знаете о том, что функции должны быть объявлены в обратном порядке.)

0 голосов
/ 01 января 2011

Изменить порядок определения функций. GetCpuClocks должен быть определен или объявлен пересылкой перед вызовом в main.

0 голосов
/ 01 января 2011

Код ссылается на GetCpuClocks () в строке 4, но GetCpuClocks не определен до строки 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...