- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这个代码:
static void XMLCALL
hackHandler(void *data, const XML_Char *name, const XML_Char **attr)
{
SetPointers* sets = static_cast<SetPointers*>(data);
if (strcmp(name, "instruction") == 0 || strcmp(name, "load") == 0 ||
strcmp(name, "modify") == 0||strcmp(name, "store") == 0) {
long address(0);
long page(0);
int offset(0);
long size(0);
int i(0);
for (i = 0; attr[i]; i += 2) {
if (strcmp(attr[i], "address") == 0) {
address = strtol(attr[i+1], NULL, 16);
page = address >> 12;
offset = address & 0xFFF;
continue;
}
if (strcmp(attr[i], "size") == 0) {
size = strtol(attr[i + 1], NULL, 16);
}
}
map<long, bitset<4096> >::iterator itLocal;
itLocal = sets->lCount->find(page);
if (itLocal == sets->lCount->end()) {
sets->lCount->insert(pair<long, bitset<4096> >
(page, bitset<4096>()));
itLocal = sets->lCount->find(page);
}
//now mark the bitmap
for (i = 0; i < size; i++) {
(itLocal->second)[i + offset] = 1;
}
if (strcmp(name, "instruction") == 0) {
itLocal = sets->lCode->find(page);
if (itLocal == sets->lCode->end()) {
sets->lCode->insert(pair<long, bitset<4096> >
(page, bitset<4096>()));
itLocal = sets->lCode->find(page);
}
for (i = 0; i < size; i++) {
(itLocal->second)[i + offset] = 1;
}
} else {
itLocal = sets->lMemory->find(page);
if (itLocal == sets->lMemory->end()) {
sets->lMemory->insert(pair<long, bitset<4096> >
(page, bitset<4096>()));
itLocal = sets->lMemory->find(page);
}
for (i = 0; i < size; i++) {
(itLocal->second)[i + offset] = 1;
}
}
}
}
这旨在标记一个 4096 位长的位集,当页面的该字节被访问时用 1 标记。
当我使用大约 1GB 的 XML 进行测试时,这段代码在我的测试机器上运行良好。但是当我在完整的东西(220GB 的 XML)上运行它时,它给出了一个段错误:
sets->lCode->insert(pair<long, bitset<4096> >
(page, bitset<4096>()));
但它在运行的早期就这样做了,所以很难认为这是数据大小的产物。在任何情况下,我都可以使用一些非常相似的代码来分析这个更大的数据集(查看我的 github 存储库 https://github.com/mcmenaminadrian - 这个项目是 memsize,但 pagestat 使用非常相似的代码)。此代码的唯一区别因素似乎是 bitset 的使用。
有人能找出我至今没有发现的错误吗?
(代码是多线程的 - bitset 线程安全吗?这可能是库问题 - 我的测试系统是 Mac OSX,但“生产”系统是 Linux - Ubuntu 12.04 LTS?)
最佳答案
没有检查来确保 i + offset
小于 4096
。这可能是问题的根源。
关于C++ std::map std::bitset 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224810/
我目前正在处理一个二进制文件,稍后将写入另一个二进制文件。这一点非常重要,也是我对使用 ArrayList 和其他列表犹豫不决的原因,因为它们往往不太适合我尝试将其直接写入文件。 我已经从这个二进制文
我需要一个 BitSet,它可以轻松连接多个 BitSet,创建一个新的 BitSet。 default implementation没有这样的方法。 你们中的任何人都知道在某些外部库中是否有任何实现
我有大量的 bitset 数据,存储在 db 中。我想把它上传到redis bitset,这样我就可以对其进行位操作了。有没有办法从 redis-cli 或 javascript 代码上传这些数据?我
在下面的函数中,我想根据突变概率来突变 BitSet。 public static Cell mutate(Cell original_){ Double mProb = 0.2; B
BitSet bits1 = new BitSet(00101010); System.out.println(bits1); 问题:为什么输出返回 { }。 List list = new Arra
我正在尝试创建一个实体/组件系统,自动匹配合适的实体和合适的系统。我正在使用 std::bitset和 RTTI自动为每个组件类型分配一个位值。 系统定义如下:MovementSystem : Sys
使用 bitset::operator[] 等同于使用 bitset::test 还是有一些底层优化? 也就是说,这两个循环是等价的吗? 使用 bitset::operator[]: static c
回答How to store binary data when you only care about speed? ,我正在尝试写一些做比较,所以我想使用 std::bitset。但是,为了公平比较
我今天刚刚学习了一些简单的加密,并编写了一个简单的程序将我的文本转换为 10 位二进制。我不确定我做的是否正确,但是代码的注释部分和实际代码有 2 个不同的 10 位输出。我很困惑。谁能用通俗易懂的语
如果我有一个 std::bitset , 我怎样才能把它转换成 std::bitset高位补0? std::bitset a = 0xFF00; std::bitset b = a; // erro
Java Bitset 类是动态的,其大小根据其中的位 ON 变化。但字节数组可以保存特定数量的位,并且很容易与 SQL Server 一起使用来从数据库复制和检索数据。这是真的吗? Bitset类可
我想使用缓存,由 boost 的 unordered_map 实现,从 dynamic_bitset 到 dynamic_bitset。当然,问题在于 bitset 中没有默认的哈希函数。这似乎不像是
我一直在查看 bitset 的头文件标准 C++ 库头文件。我发现重载的 operator[] operator[](size_t ndx)(在 bitset 类中定义)返回 reference 类的
我最近遇到了 bitset 模板,我真的很想在我当前的项目中使用它们。继续阅读,我看到 std::bitset 模板的大小必须在编译时确定。许多人建议使用 boost::dynamic_bitset
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在使用 std::bitset 并尝试创建两个大小为 100,000,000,000 的数组 std::bitset。结果,程序只占了我 298 MB 的 RAM,但必须占 ~24 GB。我有 3
一 问题描述 给定 N 个集合,第 i 个集合 Si 有 Ci 个元素(集合可以包含两个相同的元素)。集合中的每个元素都用 1~10000 的整数表示。查询给定的两个元素 i 和 j 是否同时属于至少
我的脑海中一直浮现着“bitset”这个词作为我的问题的解决方案,但我想我可能会让自己感到困惑。 我有一个指示某些条件的十六进制值列表,例如: 0x0001 = Outside 0x20000000
我正在寻找一种方法来用一个位向量(这将是该组整数的特征函数)表示一组整数,并能够对该组执行按位运算。 最初我认为 scala 的 BitSet 是理想的选择。但是,根据文档 1,BitSet 似乎不支
如果我在 Bitset 中设置两个不同的位 BitSet x= new BitSet(8); x.set(0);//.........Case1 x.set(7);//.........C
我是一名优秀的程序员,十分优秀!