2014-02-14 244 views
2

我最近上线相当于打了segmentation fault堆栈内存的iostream

some_file << some_number << ": "; 

当分配给该应用程序(这是一个伪嵌入式系统)堆栈内存增加到512   KB,我们不会分段错误。

向操作员写入文件时(< <),堆栈内存使用情况如何受到影响?

正在写入的some_file是std :: ofstream。正在编写的some_number通过引用传递给此代码行所在的方法。该软件是32位的,在CentOS上用g ++编译。

我很好奇如何(或如果)ofstream使用动态分配,即使在更高级别的一般条件下。

+4

我们应该如何回答这个问题?我们不知道你的代码是什么样的,你运行哪个硬件,如何编译它,或者你的标准库是如何实现的。 – jalf

+0

积分。我在下面的@dutt中提供了更多的细节。我基本上对使用std :: ofstream类写入文件时可能出现的任何潜在动态内存分配/堆栈使用情况感到好奇。 – user3311632

回答

0

我的第一个想法是刚刚赞成jalf's comment,但有一些事情是已知的。除非系统执行STL或编译器是非常不寻常的。

除非它被内联,并且这取决于编译器,否则就有一个函数调用,这意味着将一堆东西推送到堆栈。通话需要多少取决于寄存器的数量,寄存器的大小等等。

但是在operator<<的调用中可以使用更多堆栈。所有本地变量都使用堆栈,除非它们被内联,否则operator<<中的其他函数调用将使用堆栈。等等。

这取决于some_file是一个实例化的实现。没有更多细节,我们不能说任何具体的东西。

+0

这里没有内容。正在写入的some_file是std :: ofstream。被编写的some_number通过引用传递给这个特定的调用。该软件是32位的,并在CentOS上用g ++编译。我正在寻找instream使用内存下的内存(是否使用了大量的动态分配?),并且如果可以用这种方法将大量堆栈写入文件(使用'<<'重复调用并偶尔刷新) 。 – user3311632

+0

您是否使用过程监控程序来检查与较小的堆栈一起运行时,您有多接近极限? – dutt

+0

另外,如果它是基于centos的,应该表示它是一个正常的gnu libc实现,它应该是开源的,所以你可以查找运算符<<的实现,以便使用你正在使用的任何重载 – dutt