小编fra*_*amp的帖子

c ++中的内存分配顺序

我编写了以下代码试图解决一个请求类似数组的结构而不使用它们的挑战:

#include <iostream>

int main(){
    int x = 132,y = 33,z = 87;

    int *i = &x;

    std::cout << x << " " << y << " " << z << "\n";
    std::cout << &x << " " << &y << " " << &z << "\n";
    std::cout << i << " " << i-1 << " " << i-2 << "\n";
    std::cout << *i << " " << *(i-1) << " " << *(i-2) << "\n";   
}
Run Code Online (Sandbox Code Playgroud)

我发现2个变量的地址(&y-&x)之间的区别为-1,我随后调整了代码我不明白为什么最后定义的变量被分配到"之前"(意思是,前一个地址).

老实说,我会想到&y-&x …

c++ memory pointers

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

什么是存储时间序列的有效方法?

我有一个非常大量的数据,格式很糟糕:包含csv文件的16.4GiB zip 文件.每个都csv包含像

TYPE,2014-07-02 04:04:23.806,0.94598,0.94607
Run Code Online (Sandbox Code Playgroud)

基本上:

  • A TYPE(有14种不同类型,未来可以理想地增长)
  • A timestamp(以毫秒为单位)
  • 2个浮点数(最多5位小数),通常有一点点差
  • TYPE当它们接近时,它们的所有浮点数通常具有非常相似的值
  • 时间戳之间的差值小于1秒
  • 数据跨度为5年

总共我有3'091'472'167行,所以我们谈的是数十亿.主要操作将循环部分或全部数据集(为了在数据上运行算法),每月插入一次约2千万条记录(但插入数据不是我想要优化的东西) .

理想的解决方案是将它们存储在一个数据库中,以便我可以轻松地查询它们,但是一些粗略的计算表明我需要46GiB和Postgres(可能会因为一些丑陋的技巧而被降到18GiB).

我已经对我拥有的数据进行了一些实验,我发现:生成包含的gzip文件TIMESTAMP,FLOAT1,FLOAT2会让我~14GiB完全删除时间戳会让我降到~5GiB

节省空间的好方法是以有效的方式存储时间戳.我正在考虑创建一个树结构,其中每个节点都包含一个时间戳数字,其中叶子包含最后一个数字和两个浮点数.

我已经尝试过像druid.io这样的解决方案,但看起来他们正试图优化我的用例不需要的其他东西.

是否有一些我缺少的工具,它正是我想要的?如果没有,什么是存储时间序列数据的有效方法?

谢谢

compression time-series

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

GHC 8.0.x中的Foldl内存性能

在检查我正在处理的一些代码的内存使用情况时,我遇到了一个奇怪的问题.

使用foldl总和一个非常大的列表的元素,我得到一个恒定的内存使用.

使用foldl'我也得到一个恒定的内存使用(如预期的那样).

使用foldr内存增长并使我的系统屈膝(没有像我期望的堆栈溢出异常).

触发它所需的最小代码是: main = print $ foldx (+) 0 [1..100000000000000000000]

foldx是哪个foldl,foldr或者foldl'

我的印象是(按照Foldr Foldl Foldl的说法),情况恰恰相反.

我用上述代码设置了一个repo:https: //github.com/framp/hs-fold-perf-test

这里发生了什么?是GHC 8.0.x太聪明了吗?我在macOS Sierra上

谢谢

performance haskell fold

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

标签 统计

c++ ×1

compression ×1

fold ×1

haskell ×1

memory ×1

performance ×1

pointers ×1

time-series ×1