Tag: 堆栈

在C中,堆栈和堆创build“类”?

每当我看到一个C“类”(任何结构的意图是通过访问函数,将指针作为第一个参数使用),我看到他们这样实现: typedef struct { int member_a; float member_b; } CClass; CClass* CClass_create(); void CClass_destroy(CClass *self); void CClass_someFunction(CClass *self, …); … 在这种情况下, CClass_create总是malloc它的内存并返回一个指针。 每当我看到new C ++不必要的时候,它通常会使C ++程序员疯狂,但这种做法在C中似乎是可以接受的。 为什么堆分配结构“类”是如此普遍背后有什么理由?

何时以及如何使用GCC的堆栈保护function?

编译我正在编写的项目(商业多平台C ++游戏引擎,在Mac OS X 10.6上使用GCC 4.2编译)时,我启用了-Wstack-protector警告。 即使启用了堆栈保护function,该标志也会警告不会受到堆栈粉碎-fstack-protector的function。 海湾合作委员会在build设项目时发出一些警告: 不保护function:无缓冲区至less8字节长 不保护局部variables:可变长度缓冲区 对于第一个警告,我发现可以调整缓冲区在函数中使用时必须具有的最小大小,以防止堆栈粉碎:– –param ssp-buffer-size=X可以使用,其中X默认为8,可以低至1。 对于第二个警告,除非我停止使用-Wstack-protector否则我不能抑制它的发生。 什么时候应该使用-fstack-protector ? (例如,在开发过程中的所有时间,或只是跟踪错误?) 什么时候应该使用-fstack-protector-all ? 什么是-Wstack-protector告诉我? 是否build议我减less缓冲区的最小大小? 如果是这样的话,把尺寸设置为1还有什么缺点吗? 看起来,如果你想要一个免警告的构build, -Wstack-protector并不是你想要的标志。 这是正确的吗?

我怎样才能用GDB检查堆栈框架?

现在我已经使用GDB反汇编一个二进制文件,并检查出不同的寄存器和什么。 有一个简单的命令来检查堆栈上的一切吗? 这可以限制在一个function的一切?

堆栈溢出从Java深层recursion?

在使用函数式语言的一些经验之后,我开始在Java中使用更多的recursion – 但是这种语言似乎有一个相对较浅的大约1000的调用堆栈。 有没有办法让调用堆栈更大? 就像在Erlang一样,我可以使function深入数百万次吗? 我在做Project Euler问题时越来越注意到这一点。 谢谢。

NOP雪橇是如何工作的?

我一直在打开我的头,找不到一个很好的答案来回答这个问题。 我知道nop sled是一种用于规避缓冲区溢出攻击中堆栈随机化的技术,但我无法理解它是如何工作的。 什么是一个简单的例子来说明这种方法? 128字节的nop sled是什么意思?

如何在Ruby中获取堆栈跟踪对象?

我需要在Ruby中获得堆栈跟踪对象; 不打印它,只是为了让它做一些logging和倾销,以供以后分析。 那可能吗? 怎么样?

如何清除Android Stack的活动?

我有一个应用程序与Android中的几个活动,我希望用户能够通过按菜单button注销。 我有这个问题是 答)Android不会让你终止应用程序 B)即使我再次将用户发送到LoginActivity ,他们也可以总是按回来,并返回到之前的活动。 我已经尝试使用以下两个标志启动活动: Intent intent = new Intent(this, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 我也尝试了他们每一个人自己。 我也试过在startActivity(intent) finish()之后调用finish() ,因为我在另一个StackOverflow问题中读到。

在Android中查看活动堆栈

是否可以在Android中查看活动堆栈以进行debugging?

汇编语言如何工作?

我目前正试图理解堆栈是如何工作的,所以我决定教自己一些汇编语言 ,我正在使用这本书: http://savannah.nongnu.org/projects/pgubook/ 我正在使用Gas,并在Linux Mint上进行开发。 我有些困惑的东西: 据我所知,一个堆栈只是一个数据结构。 所以我认为如果我在汇编代码,我不得不自己实现堆栈。 然而,这似乎不是如此,因为有像这样的命令 pushl popl 所以当编译x86架构的程序集时,使用Gas语法:堆栈只是一个已经实现的数据结构? 还是实际上是在硬件层面上实现的? 或者是别的什么? 另外大多数其他芯片组的汇编语言已经实现了堆栈? 我知道这是一个愚蠢的问题,但我实际上很困惑。

堆栈和队列之间的基本区别是什么?

堆栈和队列之间的基本区别是什么? 请帮助我,我无法find差异。 你如何区分一个堆栈和一个队列? 我在各种链接search的答案,并find了这个答案.. 在高级编程中, 堆栈被定义为通过将新元素放置在现有元素的顶部而被延长的元素的列表或序列,并且通过从现有元素的顶部移除元素而缩短。 它是一个ADT [抽象数据types],其math运算是“push”和“pop”。 队列是通过将新元素放置在现有元素的后面并通过删除队列前面的元素而缩短的元素序列。 这是一个ADT [抽象数据types]。 在Java,C ++,Python等编程中对这些术语有更多的了解。 我可以有一个更详细的答案吗? 请帮帮我。