【发布时间】:2014-12-10 16:36:34
【问题描述】:
这是我的代码(它是并且必须是纯C):
unsigned long buffSize = 65536; /* 64 KB */
char *block;
block = calloc(1, buffSize);
if (block == NULL)
{
/* This is always triggered */
}
我想要一个 64 KB 的归零内存,我将在我的应用程序的其他地方循环使用它。
不幸的是calloc 总是返回NULL。当我将它与 64(字节)一起使用时,它可以工作。
我不确定如何像我的示例中那样分配“更大”的内存块?
编辑:看完cmets,这里有一些说明:
-
malloc和memset具有相同的行为与相同的buffSize。 -
sizeof(size_t) == 2而sizeof(unsigned long) == 4所以它是 16 位的。 - 目标平台是 MS-DOS 6.22。
那么在 16 位系统下,如何创建一个 64 KB 零填充的 char *?
【问题讨论】:
-
malloc 和 memset 工作吗?
-
疯狂的想法,
calloc(buffSize,1)。也可以试试`unsigned long buffSize = 65536L;'。我不知道你的平台有什么限制。 -
64KB 并没有给我留下那么大的印象。我会问一个显而易见的问题,您的系统有多少可用内存?我可以建议您尝试将 buffSize 定义为 hving 类型
size_t甚至是普通的旧int。如果这不起作用,重复将增益大小减半并查看是否有有效的大小可能会很有趣。 -
unsigned long必须至少为 32 位,但size_t可以想象为 16 位。您系统上的sizeof (size_t)是什么?malloc(buffSize)是否返回空指针?尝试64和65536之间的值范围;这是开始失败的特定尺寸吗? -
寻找
farmalloc或类似功能。 (OMG farmalloc,多少个月亮过去了,没想到还能再见到你……)