小编Joe*_*Joe的帖子

Go中结构的堆栈与堆分配,以及它们与垃圾收集的关系

我是Go的新手,我在C风格的基于堆栈的编程之间经历了一些不协调的错误,其中自动变量存在于堆栈上,并且在堆上分配了内存,以及基于Python的基于堆栈的编程,其中只有堆栈上的东西才是堆上对象的引用/指针.

据我所知,以下两个函数提供相同的输出:

func myFunction() (*MyStructType, error) {
    var chunk *MyStructType = new(HeaderChunk)

    ...

    return chunk, nil
}


func myFunction() (*MyStructType, error) {
    var chunk MyStructType

    ...

    return &chunk, nil
}
Run Code Online (Sandbox Code Playgroud)

即分配一个新结构并返回它.

如果我在C中编写它,第一个将把一个对象放在堆上,第二个将它放在堆栈上.第一个将返回一个指向堆的指针,第二个将返回一个指向堆栈的指针,该指针在函数返回时会蒸发,这将是一件坏事.

如果我用Python(或除C#之外的许多其他现代语言)编写它,那么示例2是不可能的.

我得到Go垃圾收集两个值,所以上述两种形式都没问题.

报价:

请注意,与C不同,返回局部变量的地址是完全可以的.与函数关联的存储在函数返回后仍然存在.实际上,获取复合文字的地址在每次评估时都会分配一个新实例,因此我们可以将这两行结合起来.

http://golang.org/doc/effective_go.html#functions

但它提出了几个问题.

1 - 在示例1中,结构在堆上声明.例2怎么样?在堆栈中声明的方式与在C中的方式相同,还是在堆上也是如此?

2 - 如果在堆栈上声明了示例2,那么在函数返回后它是如何保持可用的?

3 - 如果实际上在堆上声明了示例2,那么结构是如何通过值而不是通过引用传递的?在这种情况下,指针有什么意义?

heap-memory go stack-memory

146
推荐指数
4
解决办法
3万
查看次数

将PDB断点放在Python代码中的简单方法?

只是一个方便的问题.我在Visual Studio和XCode等IDE中使用调试器有点被宠坏了.我发现必须键入import pdb; pdb.set_trace()设置断点有点笨拙(我宁愿不在文件顶部导入pdb,因为我可能会忘记并将其保留).

是否有一种更简单的方法在Python代码中设置断点,与您在IDE中看到的一样简单明了?

python pdb

97
推荐指数
8
解决办法
8万
查看次数

Angular $ location.path不起作用

我有一个类似于这个的问题,但不同.

在这里,我试图为window.postMessage处理程序添加一个事件监听器.

app.run(function ($location, $window, $rootScope) {
  $window.addEventListener('message', function(e) {
      $location.path("/abc");
      console.log($location.path()); // this prints "/abc" as expected

      $rootScope.$apply(); // this has no effect

      $scope = angular.element(document).scope(); // this is the same as $rootScope
      $scope.$apply(); // so this also has no effect
  });
});
Run Code Online (Sandbox Code Playgroud)

$location.pathAngular没有承认这一点.

另一个问题是我应该调用$apply()范围,但是我可以使用的唯一范围是$rootScope调用$apply()它似乎不起作用.

对答案的评论表明可以使用范围

$scope = angular.element(document).scope()
Run Code Online (Sandbox Code Playgroud)

但这给了我$rootScope,这是行不通的.

如何通过角度来调整变化$location.path()?是否有更好的方式以message可以更改路径的方式注册回调?

angularjs

61
推荐指数
2
解决办法
9万
查看次数

Bash中的可变列表或数组结构?我怎样才能轻易附加到它?

我正在尝试在bash脚本中收集字符串值.我可以将字符串值附加到列表或数组结构的最简单方法是什么,以便我可以在最后回显它们?

arrays bash scripting

59
推荐指数
4
解决办法
5万
查看次数

LINQ to SQL已被弃用吗?

早在2008年底,就LINQ to SQL的未来发生了很多争论.许多人认为微软在.NET 4.0中对实体框架的投资是LINQ to SQL没有未来的标志.我想我会在做出自己的决定之前等待,因为人们不同意.

快进18个月,我有供应商提供依赖LINQ to SQL的解决方案,我个人试了一下,非常喜欢使用它.我想这是留下来的.

但是我正在读一本新书(Ben Watson的C#4.0 How-To)和第21章(LINQ),他认为它"或多或少被微软推荐"并建议使用LINQ to Entity Framework.

我的问题是LINQ to SQL是否正式被弃用和/或权威实体(Microsoft,Scott Gu等)是否正式建议使用LINQ to Entities而不是LINQ to SQL.

linq linq-to-entities linq-to-sql

55
推荐指数
6
解决办法
2万
查看次数

斯卡拉风格的元素?

白天我写C#.我所做的一切都通过Microsoft代码分析和静态分析工具进行,因此我的C#具有非常规则的结构和布局.显然,我用某种风格编写代码.部分原因是因为我没有选择(如果我在逗号之前错过了一个空格就不会编译),但是定期看代码,知道在哪里寻找东西等等也很好.

在周末我要进入斯卡拉.看看Scala API和Lift Web框架源代码,我无法看到任何标准化的样式.例如,跳出来的一件事是每个类缺少一个单独的文件.与括号和括号缺乏一致性是另一个例子.

我理解推动这个问题的原因可能有几个:首先,使用开源(或爱好)代码确保一个明显的方法没有完全记录,这不是一个优先事项.其次,像case类这样的东西会将20行的类声明减少为一行.第三,C#是一种非常"平坦"的语言:除非它是一个复杂的LINQ语句,嵌套的parens,括号和括号的数量并不那么深.在Scala中,事情往往会有点嵌套.

常规的Scala用户是否具有他们坚持的特定风格?为了[异化]惯例,我只是把一个单行的案例类放在自己的文件中愚蠢吗?有小费吗?

scala

43
推荐指数
3
解决办法
5191
查看次数

Java解释器?

有网上有翻译吗?我可以在其中抛出一行或两行java并输出结果?

java

42
推荐指数
4
解决办法
5万
查看次数

是否可以创建没有DOM元素的HTML画布?

我想要一个HTML画布上下文,我可以绘制并在屏幕外阅读(在这个例子中,写文本和阅读创建的形状,但这是一个普遍的问题).我可能还想使用画布作为屏幕外帧缓冲.

我想我可以创建一个隐藏的DOM元素,但我宁愿用JavaScript创建它(我可能想在运行时创建和销毁一些画布).

可能?

javascript html5 html5-canvas

42
推荐指数
3
解决办法
4万
查看次数

PermGen与Lift和Jetty有关的问题

我正在开发标准的Lift平台(maven和jetty).我反复(每隔几天一次)得到这个:

Exception in thread "7048009@qtp-3179125-12" java.lang.OutOfMemoryError: PermGen space
2009-09-15 19:41:38.629::WARN:  handle failed
java.lang.OutOfMemoryError: PermGen space
Run Code Online (Sandbox Code Playgroud)

这是在我的开发环境中.这不是问题,因为我可以继续重启服务器.在部署中我没有遇到这些问题所以这不是一个真正的问题.我只是好奇.

我不太了解JVM.我认为我认为永久代内存适用于类和内部字符串之类的东西是正确的吗?我记得有点混淆了.NET内存模型......

出现这种情况的原因是什么?默认值是否疯狂低?是否与Scala必须为Function对象和类似的FP事物创建的所有辅助对象有关?每当我用新编写的代码(每隔几分钟)重新启动Jetty时,我想它会重新加载类等等.但即便如此,它也不能用很多可以吗?JVM是否应该能够处理大量的类?

干杯

memory jvm scala lift permanent-generation

41
推荐指数
2
解决办法
2万
查看次数

HTTP重定向图像可以吗?

返回图像资源时返回301/302/303代码是否可以?我过去做过这个,似乎有效.这是一种很好的做法,是否与大多数浏览器兼容?

redirect image http http-headers

40
推荐指数
3
解决办法
2万
查看次数