小编Voi*_*ler的帖子

Rxjava - 如何获取当前项和上一项?

如何使用运算符以便我始终获得先前值和当前值?如果可能的话,我想避免在管道外创建状态。

- time ->
1      2      3      4
|      |      |      |
Operations
       |      |      |
       (1,2)  (2,3)  (3,4)

Run Code Online (Sandbox Code Playgroud)

请注意,除了第一个和最后一个值之外的每个值都必须出现两次,因此简单的缓冲区是行不通的。

我考虑过skipmergeand结合buffer,但合并似乎并不能保证顺序。

val s = PublishSubject.create<Int>()
s.mergeWith(s.skip(1)).buffer(2).subscribe{i -> print(i)}
s.onNext(1)
s.onNext(2)
s.onNext(3)
s.onNext(4)


Run Code Online (Sandbox Code Playgroud)

输出:
[1, 2][2, 3][3, 4]

val o = Observable.just(1,2,3,4)
o.mergeWith(o.skip(1)).buffer(2).subscribe{i -> print(i)}
Run Code Online (Sandbox Code Playgroud)

输出:
[1, 2][3, 4][2, 3][4]

(唯一的4个很好,并且是预期的)

kotlin rx-java rx-kotlin

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

编译器内存优化 - 重用现有块

说我要分配2个内存块.我使用第一个内存块来存储内容并使用这些存储的数据.然后我使用第二个内存块做类似的事情.

{
int a[10];
int b[10];

setup_0(a);
use_0(a);

setup_1(b);
use_1(b);    
}

 || compiler optimizes this to this?
 \/

{
int a[10];

setup_0(a);
use_0(a);

setup_1(a);
use_1(a);  
}

// the setup functions overwrites all 10 words
Run Code Online (Sandbox Code Playgroud)

现在的问题是:编译器是否优化了这一点,以便它们重用现有的内存块,而不是分配第二个内存块,如果编译器知道第一个块不会被再次引用?

如果是这样:这是否也适用于动态内存分配?如果内存在范围之外仍然存在,但是以与示例中给出的方式相同的方式使用,这也是可能的吗?我认为这只有在设置和foo在同一个c文件中实现(与调用代码存在于同一个对象中)时才有效吗?

c c++ memory-management compiler-optimization

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