我正在编写创建树的代码,以及创建树的不同方法。不过,我似乎无法使rdtsc正常运行。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
struct tnode {
int val;
struct tnode *left;
struct tnode *right;
};
struct tnode *addnode(struct tnode *p, long n);
void treeprint(struct tnode *p);
main () {
long data[SIZE]={6, 3, 8, 1, 7, 5, 2, 9, 0, 4};
int i;
struct tnode *node, *root;
unsigned long long rdtsc();
unsigned long long a, b;
printf("size of tnode = %d\n", sizeof(struct tnode));
printf("size of *node = %d\n", sizeof *node);
printf("size of &node = %d\n", sizeof &node);
printf("size of root = %d\n", sizeof root);
printf("size of *root = %d\n", sizeof *root);
printf("size of &root = %d\n", sizeof &root);
a = rdtsc();
root = NULL;
for (i = 0; i < SIZE; i++)
root = addnode(root, data[i]);
b = rdtsc();
treeprint(root);
printf("It took %llu to make this tree.\n", b-a);
}
假设上面列出的所有功能都得到了处理(当然除了rdtsc之外)。
当我尝试编译时,我收到此错误:
/tmp/cccnojMf.o: In function `main':
tree.c:(.text+0xd9): undefined reference to `rdtsc'
tree.c:(.text+0x120): undefined reference to `rdtsc'
collect2: ld returned 1 exit status
为什么我收到这个未定义的引用错误?
答案 0 :(得分:2)
添加此项并将其用作功能。
__inline__ uint64_t rdtsc(void)
{
uint32_t lo, hi;
__asm__ __volatile__ (
"xorl %%eax,%%eax \n cpuid"
::: "%rax", "%rbx", "%rcx", "%rdx");
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return (uint64_t)hi << 32 | lo;
}