【发布时间】:2021-11-03 20:21:54
【问题描述】:
我正在尝试为 Libvirt API 函数创建 CPU-Map。这个想法取决于物理 CPU 的数量,我分配 1、2 或 4 个字节的内存(最多支持 32 个 CPU)。例如,如果一个平台有 16 个 CPU,我分配 2 个字节。
内存分配后,我需要设置CPU位。例如:如果我在平台中有 16 个 CPU,并且我想将一个虚拟 CPU 固定到第 16 个 CPU,我需要在分配的内存中设置 MSB。见下面的代码sn-p。
void *cpuMap;
switch (pCpus/8) {
case 0:
case 1:
size = sizeof(unsigned char);
cpuMap = (unsigned char*) malloc(size);
break;
case 2:
size = sizeof(unsigned short int);
cpuMap = (unsigned short int*) malloc(size);
break;
case 3:
case 4:
default:
size = sizeof(unsigned int);
cpuMap = (unsigned int*) malloc(size);
break;
}
*cpuMap = 0x1 << cpu_number; //error: invalid use of void expression
在编译过程中出现以下错误
vcpu_scheduler.c:317:3: warning: dereferencing ‘void *’ pointer
317 | *cpuMap = 0x1 << cpu_number;
| ^~~~~~~
vcpu_scheduler.c:317:11: error: invalid use of void expression
317 | *cpuMap = 0x1 << cpu_number;
| ^
make: *** [Makefile:4: compile] Error 1
感谢任何帮助。
【问题讨论】:
-
转换
malloc的结果不会改变它被取消引用时发生的情况,C 不是动态类型的。当你知道你要使用什么类型时,你需要做作业。 -
pCpus和cpu_number嗯...相同或不同的东西? -
pCpusequal 12 --> case 1 嗯……这真的是你想要的吗?
标签: c void-pointers libvirt