了解c语言的朋友请进

liuweiwei1 2002-05-03 12:53:42
刚才在扯一本清华大学出版的《c语言常见问题解答》时,其中有一句:…也就是说这将浪费所有在longjmp()和setjmp()之间用malloc() 和calloc()分配所得的内存,从而使程序的效率大大降低。
我只看过谭浩强编的《c语言程序设计》一书,在那本书中好像我记得没有提到过
longjmp( )\setjmp()\malloc()\calloc()
请大家帮帮忙,告诉我这些是干什么用的。关系怎样?
...全文
44 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maxwell 2002-05-04
  • 打赏
  • 举报
回复
to legsion(小风):
开玩笑,这是标准函数库中的,dos下也有。
legsion 2002-05-03
  • 打赏
  • 举报
回复
嗬嗬,忘了说明:这是适应于unix的函数
legsion 2002-05-03
  • 打赏
  • 举报
回复
longjmp---执行非局部跳转。
[原型]setjmp.h
[格式]void longjmp( jmp_buf jmpb,int retval);
[作用]longjmp用参数jmpb来恢复最后一次调用setjmp捕获的任务状态,然后返回retval值。

setjmp---非局部转移。
[原型]setjmp.h
[格式]int setjmp(jmp_buf jmpb);
[作用]捕获jmpb中的任务状态并返回0。以后要用jmpb来调用longjmp来恢复捕获的任务状态并以srtjmp返回值的方式返回
[返回]第一次调用,setjmp返回0,如果返回将调用longjmp,则setjmp返回一个非0值。

任务状态包括:所有的段寄存器,寄存器变量,堆栈指针等。呵呵,你明白为什么在setjmp和longjmp中通过使用malloc() 和calloc()分配所得的内存,会被浪费了么?因为恢复的都是保存在内存分配之前的任务状态!
cky2 2002-05-03
  • 打赏
  • 举报
回复
好象是:setjmp可以将要返回的地址保存起来,longjmp可以 从程序的任何地方跳出来,转移到setjmp所保存的地址处执行。它们常用在深层次的递归程序中快速返回。
ML20 2002-05-03
  • 打赏
  • 举报
回复
格式:void *malloc(size_t size);
   void free(void *block);
用途:堆(heap)内存容许程序在运行时(而不是在编译时),申请某个大小的内存空间.
   malloc()是获得堆内存的方法,free()返还由malloc()分配的堆内存.
例子:
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>

int main(void)
{
char *str;

/* allocate memory for string */
if ((str = (char *) malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* terminate program if out of memory */
}

/* copy "Hello" into string */
strcpy(str, "Hello");

/* display string */
printf("String is %s\n", str);

/* free memory */
free(str);

return 0;
}
born_in70s 2002-05-03
  • 打赏
  • 举报
回复
longjmp 和 setjmp 是 C 中用来捕捉异常的一种方式。具体请
参看 MSDN.
Maxwell 2002-05-03
  • 打赏
  • 举报
回复
前一个分配指定字节数的内存,原型是
void *malloc(size_t size);
后一个可以在分配数组时用,分配指定项,每项为指定大小的内存,原型是
void *calloc(size_t nitems, size_t size);
liuweiwei1 2002-05-03
  • 打赏
  • 举报
回复
是的,前面两个是跳转指令,但是后面两个是什么内存分配函数?能说得更加仔细一点吗?
还有他们的用途呢、
sandwish2000 2002-05-03
  • 打赏
  • 举报
回复
longjmp setjmp好像是与汇编中的跳转指令有关!
malloc()和calloc()是内存分配函数,件malloc.h
liushmh 2002-05-03
  • 打赏
  • 举报
回复
这些都是系统函数,你可以在三级b 的考试资料上面找到这些函数是干什么用的.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧