【发布时间】:2021-04-07 11:55:54
【问题描述】:
我必须创建一个内存分配程序,该程序应该将内存块分配给包含 8 个连续内存位置的内存。 N 是内存大小,M 是程序可以请求的最大位置数,X 是请求的内存位置数。内存被分成 M 个块,每个块由 N/M 个内存位置组成。 N/M 必须大于 M,否则程序将没有足够的内存分配给一个块。 POS的第一个元素存储1个内存位置的第一个可用块所在的位置(在内存中),第二个元素存储2个内存位置的第一个可用块所在的位置(在内存中),依此类推。如果数组 POS 中的第 i 个元素存储数字 -1,则意味着在第 i 个块中没有可用的 (i+1) 个内存位置块。如果 POS[X-1] 存储的值与 -1 不同,则表示有空间分配 X 块。在这种情况下,将返回存储在 POS[X-1] 中的值。否则,返回值 -1。
根据我对问题的理解,它希望我创建一个内存分配程序,将 8 个内存位置分成块。每个块需要大约与 M 一样大,这是程序可以请求的最大内存位置数。所以问题中的 M 是 3,所以每个块应该是大约 3 个内存位置,这意味着两个块 3 和一个块 2。现在第一个块仅分配给只需要 1 个内存位置的请求,第二个块用于需要的请求2 个连续的内存位置和第三个块用于需要 3 个内存位置的请求。 Example using 16 memory positions。这是我目前所拥有的。
#include <iostream>
using namespace std;
int search(int arr[], int n, int m, int x)
{
int POS[m];
if(POS[x-1]!=-1){
return POS[x-1];
} return -1;
}
int main(void)
{
int arr[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; //example array, -1 represents available memory space
int x = 2; //example number of memory positions requested
int n = sizeof(arr) /sizeof(arr[0]); //size of array
int m = 3; //maximum number of positions a program can request
int result = search(arr, n, m, x);
if(result == -1) {
cout << "No slots available";
} else {
cout << x << " slots available at index " << result;;
}
}
【问题讨论】:
-
你需要弄清楚你的命名法——在你这样做之前,你的描述对人类来说是模棱两可的(这意味着没有办法将它翻译成计算机可以理解的代码——本质上是一个需要学究式明确指示才能正常工作的无知者)。例如,当您说“8 字节内存”时,您的意思是 地址 存储在 8 个字节中吗?如果您还假设一个字节由 8 位组成(标准不保证这一点),这通常称为 64 位内存。
-
@Peter 在这种情况下,它意味着 8 个连续的内存位置。我不确定,但哪些其他术语不明确?