我有几个MVC4应用程序,当通过Web Deploy发布时,它们并不总是写两个文件bin\App_global.asax.compiled和bin\App_global.asax.dll.如果我多次发布它最终将发布此文件.
如果没有文件,则不会构建路由表,并且403.14在尝试访问任何控制器功能时出现错误.
我在VS2012 Ultimate Update 4和VS2013 Ultimate Update 1中都遇到此问题.
如果我运行发布预览,它通常会告诉我它将删除这两个文件,如果我刷新预览,它将从删除这两个文件更改为更新.
如果我在声明并初始化的函数外的文件中有变量:
static int i = 42;
Run Code Online (Sandbox Code Playgroud)
变量i存储在哪里?它是数据部分吗?
如果我在函数外部的文件中有变量,则声明但未初始化为:
static int j;
Run Code Online (Sandbox Code Playgroud)
变量j存储在哪里?是BSS吗?
我假设默认情况下j将被初始化为零,所以如果我稍后会这样做:
j = 1;
Run Code Online (Sandbox Code Playgroud)
j现在将存放在哪里?
现在对我真正感兴趣的部分是:所有线程都可以使用静态文件范围变量吗?
我问,因为堆当然可用于所有线程,但每个线程都有自己的堆栈,之前我曾假设静态文件范围变量放在堆栈上,就像在函数内声明的变量一样.
出于好奇 - 静态文件范围变量的相同存储规则是否也适用于全局变量?
大规模编辑:
在juanchopanza建议之后,我设法得到了这个最小的例子:
#include <memory>
struct a{
int b;
};
int main()
{
typedef std::auto_ptr<a> ArgAutoPtr;
ArgAutoPtr floatingArg;
floatingArg = ArgAutoPtr( new a );
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
no match for 'operator=' in 'm_floatingArg = std::auto_ptr<a>(((a*)operator new(4u)))'
Run Code Online (Sandbox Code Playgroud)
QNX 6.4.1与GCC 4.3.3
编辑
我设法像这样编译它.这是否按预期工作或将产生......无论邪恶auto_ptr产生什么?
ArgAutoPtr floatingArg2 = ArgAutoPtr( new a );
floatingArg = floatingArg2;
Run Code Online (Sandbox Code Playgroud)