int main(void)
{
std::string foo("foo");
}
Run Code Online (Sandbox Code Playgroud)
我的理解是上面的代码使用默认的allocator来调用new.因此,即使在堆栈上分配了std :: string foo,foo中的内部缓冲区也会在堆上分配.
如何创建完全在堆栈上分配的字符串?
通过扩展类Vector,Java的设计者能够快速创建类Stack.这种继承使用的负面影响是什么,特别是对于类Stack?
非常感谢.
以下代码不能按预期工作,但希望说明我的尝试:
long foo (int a, int b) {
return a + b;
}
void call_foo_from_stack (void) {
/* reserve space on the stack to store foo's code */
char code[sizeof(*foo)];
/* have a pointer to the beginning of the code */
long (*fooptr)(int, int) = (long (*)(int, int)) code;
/* copy foo's code to the stack */
memcpy(code, foo, sizeof(*foo));
/* execute foo from the stack */
fooptr(3, 5);
}
Run Code Online (Sandbox Code Playgroud)
显然,sizeof(*foo)不返回foo()函数代码的大小.
我知道在某些CPU上执行堆栈是受限制的(或者至少在设置了限制标志的情况下).除了最终可以存储在堆栈中的GCC嵌套函数之外,还有一种方法可以在标准C中实现吗?
任何人都可以给我一个快速概述/指向我检查C程序的堆栈(和堆?)的方法的文档?我认为这应该用GDB来完成,但是如果还有其他更直接的选择,那么这也应该没问题.
谢谢.
我认为它们非常相似......我们何时需要使用堆栈或队列,为什么不使用ArrayList或LinkedList来替换它们呢?
我有半透明主题的活动:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Run Code Online (Sandbox Code Playgroud)
此问题也可以通过以下主题重现:
<style name="MyTheme" parent="@android:style/Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackground">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)
此活动在启动时加载并保存在内存中(当我开始此活动时,我将该FLAG_ACTIVITY_REORDER_TO_FRONT标志作为额外标记).
问题:当我开始此活动时(从菜单中),活动没有显示,没有任何反应.但是:如果我删除半透明主题:一切正常,活动就会回到正面.
是的onNewIntent()被调用.
如果我按回半透明活动是下面的那个!但它需要成为顶级.
一个例子是
A(半透明活动)BC
堆栈:A
一个startActivity(B)
堆栈:A,B
B startActivity(C)
堆栈:A,B,C
c startActivity(A)//带有标志FLAG_ACTIVITY_REORDER_TO_FRONT
堆栈应为:B,C,A
但是A永远不会被带到前面,尽管它的onNewIntent()被调用.
有任何想法吗?
旁注
有趣的未回答的问题:http://groups.google.com/group/android-developers/browse_thread/thread/269c67f6b39cfe45?pli = 1
android:launchMode的singleTask或singleInstance不希望被使用.这些更改了backstack并将活动移动到自己的堆栈中.因此我们不再有A,B,C了.
singleTask和singleInstance - 不适合大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序非常不同.
http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
想要直观表示launchModes的任何人都可以尝试以下应用:https://play.google.com/store/apps/details? id = com.novoda.demos.activitylaunchmode
似乎为C程序或Ruby程序(使用C堆栈)设置堆栈大小的推荐方法是ulimit在Bash shell中使用.但
$ ulimit -s
8192
$ ulimit -s 16384
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
并sudo没有帮助.有没有办法将其设置为16MB,32MB或64MB?我认为应该有一种方法来设置每个程序调用,而不是设置系统范围的参数?
现在8192可能意味着8MB这是非常小的,如果将其与进程可以使用的数量进行比较,有时甚至高达2GB的RAM.
(更新的注释: ulimit -a可以显示其当前值).
(更新2:它实际上似乎ulimit -s <value>是每个shell,如果你第一次设置它,它通常会工作.问题是当你第二次设置它,然后它可能会返回一个错误)
我有一些关于堆栈的问题.
我一直试图找出什么时候在堆栈上分配的东西,我无法弄清楚如何在堆栈上分配数组(或者更确切地说是其中的值);
在这个例子中:
public void foo()
{
int bar[] = new int [10];
}
Run Code Online (Sandbox Code Playgroud)
将在堆上分配10个int结构,只有指向它们的指针才会在堆栈上,对吗?
如何使固定大小的数组进入堆栈?如果我使用的是我定义的结果怎么办?
如果我想将数组大小作为参数传递给函数怎么办?
据我所知,当调用函数时,如果在调用函数时已知大小,则在堆栈上获取任意大小的数组应该没有问题.
我是否应该为此烦恼?据我所知,在堆栈上获取这个固定大小的数组会提高性能,因为没有完成堆分配.