有没有其他半/便携的方式来动态分配内存?

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。”为了更方便。

以上是关于有没有其他半/便携的方式来动态分配内存?的主要内容,如果未能解决你的问题,请参考以下文章

C和C指针小记(十六)-动态内存分配

:内存管理 -- 内存空间的扩充(覆盖技术交换技术)连续分配管理方式(单一连续分配(系统区/用户区)固定分区分配动态分区分配)动态分区分配算法

:内存管理 -- 内存空间的扩充(覆盖技术交换技术)连续分配管理方式(单一连续分配(系统区/用户区)固定分区分配动态分区分配)动态分区分配算法

c 链表和动态内存分配

动态内存分配php

c语言分配内存方式都有哪些