让我们来看看这段代码。我认为c++函数在eax中只返回一个int值。那么它在哪里存储向量结果呢?堆?堆栈?
谢谢
#include <iostream>
#include <vector>
using namespace std;
vector<int> fonction(int a)
{
vector<int> vec;
for (int i=0;i<a;i++)
{
vec.push_back(1);
}
return vec;
}
int main(int argc, char *argv[])
{
cout << "test" << endl;
auto res = fonction(10);
cout << res.size() << endl;
return 0;
}发布于 2017-06-30 20:45:31
就寄存器而言,C++标准没有指定哪些寄存器应该包含该值,因为该标准不依赖于体系结构。它只是定义了语言的语法和语义
至于在函数中创建向量时会发生什么,向量的内容存储在堆中(像往常一样),向量本身(即指针和其他记账)存储在函数的栈帧中。
当您通过值从函数返回向量时,返回值被视为r值,并且该r值将被保证移动到已在main中分配的向量中(即指针和其他记账)。
注意,有一种叫做NRVO的东西,如果编译器能够应用它的话。没有移动,值只是从函数的堆栈中取出,并放在它需要去的地方。
好的,从一个函数返回一个向量类型正确吗?
当然,这完全没问题
发布于 2017-06-30 20:51:20
看起来像x86_64的gcc在调用者的堆栈上分配返回向量结构,并在rax中返回指向它的指针。
movq -48(%rbp), %rax
...
rethttps://stackoverflow.com/questions/44846747
复制相似问题