小编Cha*_*ang的帖子

malloc如何理解对齐?

以下摘录自此处

pw = (widget *)malloc(sizeof(widget));
Run Code Online (Sandbox Code Playgroud)

分配原始存储.实际上,malloc调用分配的存储空间足够大并且适当地对齐以容纳类型为widget 的对象

他还说,从草本植物中看到快速的pImpl,他说:

对齐.任何内存对齐.保证通过new或malloc动态分配的任何内存都可以正确地对齐任何类型的对象,但是没有动态分配的缓冲区没有这样的保证

我对此感到好奇,malloc如何知道自定义类型的对齐方式?

c c++ memory-alignment

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

当两个对等体同时将更改推送到同一个远程时,git如何工作

我是git的新手,我通常使用具有中央存储库的P4,而git是分布式VCS.

我感兴趣的是当两个对等体同时将更改推送到同一个远程时git如何工作.假设每个对等体在推送之前解决了所有冲突.我想如果git报告冲突,后者将被拒绝!

但是,根据我的理解,git在内部是一个键/值存储,就像当前流行的NOSQL数据库,尤其是支持p2p复制的Couch-DB.

其实我想问一下,在客户端将更改推送到远程git存储库的情况下,git进程如何冲突?推被拒绝了吗?

从马克的答案来看,我认为推动应该被拒绝.

git

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

btree如何存储在光盘上?

我知道如何在内存中实现btree,但不清楚如何在光盘中存储btree.我认为有两个主要区别:

  1. 内存指针和光盘地址之间的转换,请参阅此文章.
  2. 插入新的k/v项目时如何拆分页面?它很容易在内存中实现.

谢谢

database algorithm b-tree

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

如何动态查找连接组件

使用不相交集数据结构可以轻松获得Graph的连通组件.而且,它只支持增量连接组件.

但是,在我的情况下,删除边缘非常常见,因此我正在寻找算法或新结构可以完全动态地维护连接组件(包括添加和删除边缘)

谢谢

algorithm boost graph-theory

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

内存屏障和linux上的atomic_t

最近,我正在阅读一些Linux内核空间代码,我看到了这一点

uint64_t used;
uint64_t blocked;

used = atomic64_read(&g_variable->used);       //#1
barrier();                                     //#2
blocked = atomic64_read(&g_variable->blocked); //#3
Run Code Online (Sandbox Code Playgroud)

这段代码片段的语义是什么?是否确保#1在#3之前执行#1.但是,我有点困惑,因为

#A在64位平台中,atomic64_read宏被扩展为

used = (&g_variable->used)->counter           // where counter is volatile.
Run Code Online (Sandbox Code Playgroud)

在32位平台中,它被转换为使用锁cmpxchg8b.我假设这两个语义具有相同的语义,对于64位版本,我认为这意味着:

  1. 全有或全无,我们可以排除地址未对齐且字大小大于CPU本机字大小的情况.
  2. 没有优化,强制CPU从内存位置读取.

atomic64_read没有保留读取顺序的语义!看到这个

#B屏障宏定义为

/* Optimization barrier */
/* The "volatile" is due to gcc bugs */
#define barrier() __asm__ __volatile__("": : :"memory")
Run Code Online (Sandbox Code Playgroud)

wiki中可以防止gcc编译器重新排序读写.

我感到困惑的是它如何禁用CPU的重新排序优化?另外,我认为屏障宏是完全围栏吗?

linux concurrency multithreading atomic barrier

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

缓存不经意的前瞻阵列

我试图理解这里描述的simipiled cache oblivious lookahead lookahead array ,以及本演示文稿的第35页

插入简化分形树的分析:

  1. 合并2个大小为X的数组的成本是O(X = B)块I/O. 合并非常有效I/O.
  2. 要合并的每个元素的成本是O(1/B),因为合并了O(X)元素.
  3. 每个元素合并的最大次数是O(logN).
  4. 平均插入成本为O(logN/B)

我可以看到#1,#2和#3,但我无法理解#4,从论文中,合并可以被认为是二进制加法进位,例如,(31)B可以呈现:11111
当插入新的时item(加1),应该有5 = log(32)merge(5进位).但是,在这种情况下,我们必须合并32个元素!另外,如果每次我们加1,那么将从0到2 ^ k执行多少次携带?anwser应该是2 ^ k - 1.换句话说,每次插入一次合并!

那么如何计算#4?

database algorithm caching

10
推荐指数
2
解决办法
2909
查看次数

嵌入式couchDB

CouchDB很棒,我喜欢它的p2p复制功能,但是它有点大(因为我们必须安装Erlang)并且在桌面应用程序中使用时速度较慢.

正如我在intel duo core cpu中测试的那样,

  1. 加载10000个文档需要12秒
  2. 10秒插入10000文档,但需要20秒更新视图,所以总计是30秒

是否有任何没有SQL实现具有相同的p2p复制功能,但大小非常小,如sqlite,速度非常好(1秒加载10000文档).

database performance replication couchdb nosql

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

erlang如何访问共享资源?

我是erlang的新手,而erlang是面向并发的编程,它没有可变的数据结构,这就是为什么它很容易并行化.

但无论如何,共享资源仍然存在,例如,写入同一文件.在这种情况下,erlang如何同步访问两个进程之间的共享资源?

erlang

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

valgrind memcheck是否支持检查mmap

我正在尝试valgrind来检测内存泄漏.它适用于堆泄漏(即来自malloc或new的内存分配).但是,它是否支持在Linux中检查mmap泄漏?

谢谢张

c c++ valgrind memory-leaks mmap

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

opencv面部sdk支持

我正在寻找可以支持面部检测,识别和集群的SDK.我们尝试过Pittpatt,它运作得很好,但它被谷歌收购,因此冻结了新的合同.因此我们必须决定使用OpenCV,这对业务来说风险很低,而技术风险很高.

我们希望找到提供OpenCV人脸检测服务的公司或个人.

如果有人对它感兴趣,请告诉我.

谢谢

c# c++ java algorithm face-recognition

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