在linux内核中goto出现的频率很高,书上说是考虑到内核的执行效率。
但在下面的函数中,如果将goto换成return,那不更直接?
请大虾指教!
asmlinkage int sys_execve(struct pt_regs regs)
{
int error;
char * filename;
filename = getname((char *) regs.ebx);
error = PTR_ERR(filename);
if (IS_ERR(filename))
goto out;
error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, ®s);
if (error == 0)
current->;ptrace &= ~PT_DTRACE;
putname(filename);
out:
return error;
}
当然不是!内核中编程和应用层大大不一样,你还忘了内核中为什么要大量用goto语句的另一个重要原因,就是内核中经常会牵涉到分配内存空间,而内核页的大小是有限的,内核堆栈空间也仅仅只有8k字节而已,如果已经分配了的空没有释放就会引起大量内存泄漏问题,在你这个例子中,我们分析一下: asmlinkage int sys_execve(struct pt_regs regs) { int error; char * filename; filename = getname((char *) regs.e