C 中任意内存的类型

2024-03-26

这是参考这个问题

如何正确实现c malloc/realloc函数? https://stackoverflow.com/questions/38951255/how-to-implement-the-c-malloc-realloc-functions-properly/38951308#38951308

其中接受的答案提到char数组可用于模拟任意内存池。

然而,对该已接受答案的评论之一指出

没有分配存储持续时间的 char 数组只能是 由字符类型别名。换句话说,它不能而且应该 不能用作任意内存

它是否正确?如果可以的话,那可以用什么呢?我想避免使用alloc或任何特定的操作系统调用 - 所以我对这个问题是对称的。


周围存在着不同的问题。首先如@Magisch 所示answer https://stackoverflow.com/a/38968769/3545273相关的问题是返回一个dangling指针导致未定义的行为和通常的执行错误。

第二个与@^*#(此处为审查制度)严格的别名规则有关。当您使用字符数组作为大缓冲区时,常见编译器会生成正确的代码allocate只要确保正确对齐,即可使用其中的任何类型。毕竟,这就是他们必须实施的方式malloc, realloc, and free例程。由于他们是托管环境(C 标准库),编译器开发人员还没有足够的受虐狂来禁止这种用法。

但C标准在这里更严格一些。你应该阅读我自己的答案here https://stackoverflow.com/a/38608659/3545273对于类似的问题,特别是@EOF 的评论:

您不能将声明为 char [] 的对象的一部分打包为其他类型(字符类型除外)的对象,因为它们确实具有声明的类型...这意味着从技术上讲您无法在纯 C 中实现 malloc()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中任意内存的类型 的相关文章

随机推荐