有没有其他半/便携的方式来动态分配内存?
Posted
技术标签:
【中文标题】有没有其他半/便携的方式来动态分配内存?【英文标题】:Are there any other semi/portable ways to dynamically allocate memory? 【发布时间】:2012-12-01 12:47:09 【问题描述】:这个:
char *buf = NULL;
scanf("%ms", &buf);
将获得一个动态分配的字符缓冲区。我知道这仅限于使用 Gcc(特别是 glibc 的 2.7 版)编译的代码。
我也知道“正确”和可移植的方式是只使用malloc()
(和朋友)来获取内存。
不过,我很好奇,是否还有其他便携式或半便携式* 实现来获取动态分配的内存?我发现 C 中的内存分配技巧和技巧对于“Google”来说是一个难题。
注意:这对任何事情都不是“必需的”,因此对答案没有限制。
* 半便携的意思是“如果你按照我的方式编译,这将起作用”
【问题讨论】:
sbrk()
或 mmap()
计数吗?
顺便说一句,将&
添加到scanf("%ms", &buf);
@VladLazarenko - mmap()
不会分配内存吗?
@MohamedKALLEL - 哎呀,打字太快了。感谢您的更新!
您是在谈论另一种将单词读入动态分配字符串的方法,还是更通用的方法?
【参考方案1】:
POSIX 有
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
和
ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
这应该是半便携式的。
【讨论】:
If *lineptr is NULL, then getline() will allocate a buffer
- 不错。我认为这比我的 gcc 示例更便携。
并且“如果缓冲区不够大,无法容纳该行,getline()
会使用 realloc(3) 调整其大小,并根据需要更新 *lineptr 和 *n。”为了更方便。以上是关于有没有其他半/便携的方式来动态分配内存?的主要内容,如果未能解决你的问题,请参考以下文章
:内存管理 -- 内存空间的扩充(覆盖技术交换技术)连续分配管理方式(单一连续分配(系统区/用户区)固定分区分配动态分区分配)动态分区分配算法
:内存管理 -- 内存空间的扩充(覆盖技术交换技术)连续分配管理方式(单一连续分配(系统区/用户区)固定分区分配动态分区分配)动态分区分配算法