objective-c - C和Objective-C中返回地址的内存分配

标签 objective-c c memory-management

在 C 函数中,局部变量的内存在函数被调用时分配,并在函数结束时释放。对于返回值(例如 int、string)的函数,何时何地分配和释放返回地址的内存,它是调用堆栈的一部分吗还是被调用者栈,或者别的什么?

考虑以下示例:

int* foo()
{
   int _myInt;
   return(&_myInt);
}

这个例子让我对如何为返回指针的返回地址分配内存感到完全困惑。有人可以解释一下吗?

C 和 Objective-C 也一样吗?

最佳答案

我不知道 Objective-C,但对于标准 C,返回值通常存储在寄存器中。

当函数返回指针类型时,由开发人员确保指向的内存在调用后仍然有效。

考虑以下函数:

char* GetStr()
{
    char buff[50];
    strcpy(buff, "Hello, World!");
    return buff;
}

此函数返回一个指向本地内存的指针,该指针在函数返回时被释放。访问该内存将构成具有未定义行为的错误。

这也适用于您的示例,该示例无效。但是由于 int 可以放入寄存器中,您可以简单地执行 return _myInt; 并直接返回值。

关于objective-c - C和Objective-C中返回地址的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238198/

相关文章:

objective-c - 为什么使用 NSError 间接参数而不是 @try/@catch/@finally

iphone - stanford cs193p - PrintIntrospectionInfo - 第 4 节作业 1b

c++ - 如何保证进程调用malloc()时立即分配物理内存?

iphone - 如何为状态 UIControlStateHighlighted 设置按钮标签文本颜色

objective-c - NSSet 到 NSArray 转换调用 objectAtIndex?

c - C中数组的地址等于它的第一个元素吗

android - 在 getrrsetbyname.c 中交叉编译适用于 Android 的 OpenSSH 失败

c++ - 如何让 GCC 报告每次出现未声明的符号?

performance - 在 Lua 中,我应该在循环的每次迭代中还是在循环之前定义一个变量?

在 tomcat 服务器上导入 72MB XAR 文件时出现 java 堆内存不足错误?