如何使用运算符以便我始终获得先前值和当前值?如果可能的话,我想避免在管道外创建状态。
- time ->
1 2 3 4
| | | |
Operations
| | |
(1,2) (2,3) (3,4)
Run Code Online (Sandbox Code Playgroud)
请注意,除了第一个和最后一个值之外的每个值都必须出现两次,因此简单的缓冲区是行不通的。
我考虑过skip与mergeand结合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个很好,并且是预期的)
说我要分配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文件中实现(与调用代码存在于同一个对象中)时才有效吗?