int mem[mem_page_num]; // 内存页面 int next_use[mem_page_num]; // 下一次被访问的时间 这两句报错 expected constant expression
时间: 2024-03-12 08:47:04 浏览: 91
mem_test.rar_VHDL/FPGA/Verilog_VHDL_
这个错误是因为在 C 语言中,数组的大小必须是常量表达式,不能使用变量。在这种情况下,我们可以使用动态内存分配函数 `malloc` 来分配内存,以便能够在运行时根据变量的值动态地分配内存。
以下是修改后的代码:
```
int opt_missing_page_num(int* page_seq, int seq_len, int mem_page_num) {
int missing_page_num = 0; // 缺页次数
int *mem, *next_use; // 内存页面和下一次被访问的时间
int i, j, k, max_next_use, max_next_use_page;
mem = (int*)malloc(mem_page_num * sizeof(int));
next_use = (int*)malloc(mem_page_num * sizeof(int));
for (i = 0; i < mem_page_num; i++) {
mem[i] = -1;
next_use[i] = -1;
}
for (i = 0; i < seq_len; i++) {
// 如果页面已在内存中,则更新下一次被访问的时间
for (j = 0; j < mem_page_num; j++) {
if (mem[j] == page_seq[i]) {
for (k = i + 1; k < seq_len; k++) {
if (page_seq[k] == page_seq[i]) {
next_use[j] = k;
break;
}
}
break;
}
}
// 如果页面不在内存中,则进行页面置换
if (j == mem_page_num) {
missing_page_num++;
// 查找下一个要被访问的页面
max_next_use = -1;
max_next_use_page = -1;
for (j = 0; j < mem_page_num; j++) {
if (next_use[j] == -1) {
max_next_use_page = j;
break;
}
if (next_use[j] > max_next_use) {
max_next_use = next_use[j];
max_next_use_page = j;
}
}
// 置换页面
mem[max_next_use_page] = page_seq[i];
for (k = i + 1; k < seq_len; k++) {
if (page_seq[k] == page_seq[i]) {
next_use[max_next_use_page] = k;
break;
}
}
}
}
free(mem);
free(next_use);
return missing_page_num;
}
```
在这个修改后的代码中,我们使用了 `malloc` 函数来动态分配内存。在函数结束时,我们还需要使用 `free` 函数来释放内存。
阅读全文