小编mor*_*ten的帖子

为什么这些功能会有不同的评估

我正在尝试使用haskell,在尝试提高代码的可读性时,我突然改变了它的行为.我原以为这两种变体是等价的.

原版的:

f :: Eq c => c -> c -> [[c]] -> [[c]]
f d c acc  
  | c == d    = [] : acc
  | otherwise = ([c] ++ (head acc)) : tail acc

split :: Eq a => a -> [a] -> [[a]]
split delim = foldr (f delim) [[]]
Run Code Online (Sandbox Code Playgroud)

这是第二个:

f' :: Eq c => c -> c -> [[c]] -> [[c]]
f' d c (currentWord:wordsSoFar)  
  | c == d    = [] : currentWord : wordsSoFar …
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation

10
推荐指数
1
解决办法
204
查看次数

jit会优化新对象吗?

我创建了这个类是不可变的,并且具有流畅的API:

public final class Message {
    public final String email;
    public final String escalationEmail;
    public final String assignee;
    public final String conversationId;
    public final String subject;
    public final String userId;

    public Message(String email, String escalationEmail, String assignee, String conversationId, String subject, String userId) {
        this.email = email;
        this.escalationEmail = escalationEmail;
        this.assignee = assignee;
        this.conversationId = conversationId;
        this.subject = subject;
        this.userId = userId;
    }

    public Message() {
        email = "";
        escalationEmail = "";
        assignee = "";
        conversationId = "";
        subject = …
Run Code Online (Sandbox Code Playgroud)

java jit fluent immutability compiler-optimization

4
推荐指数
1
解决办法
676
查看次数

为什么在缺少width参数时fprintf导致内存泄漏并无法正常运行

以下简单程序的行为异常。有时它打印“ 0.00000”,有时它打印的“ 0”超出我的计算。有时,它会耗尽系统上的所有内存,然后系统要么终止某些进程,要么由于bad_alloc失败。

#include "stdio.h"

int main() {
  fprintf(stdout, "%.*f", 0.0);
}
Run Code Online (Sandbox Code Playgroud)

我知道这是fprintf的不正确用法。应该有另一个参数指定格式的宽度。令人惊讶的是,这种行为是不可预测的。有时似乎使用默认宽度,而有时却非常严重。难道这不能总是失败或总是使用某些默认行为吗?

我在工作中的一些代码中遇到了类似的用法,并花了很多时间弄清楚发生了什么。它似乎仅在调试版本中发生,而在使用gdb进行调试时则不会发生。另一个好奇之处是,通过valgrind运行它会始终导致打印很多“ 0”的情况,否则这种情况很少发生,但是也不会发生内存使用问题。

我正在运行Red Hat Enterprise Linux 7,并使用gcc 4.8.5进行了编译。

c c++ printf memory-leaks

3
推荐指数
1
解决办法
111
查看次数