小编dme*_*ter的帖子

std :: string作为C++字节数组

Google的Protocol缓冲区使用C++标准字符串类std::string作为可变大小字节数组(参见此处),类似于Python,其中字符串类也用作字节数组(至少在Python 3.0之前).

这种方法似乎很好:

  • 它允许通过快速分配assign和快速直接访问,data这是不允许的vector<byte>
  • 与使用不同,它允许更容易的内存管理和const引用byte*.

但我很好奇:这是C++中字节数组的首选方式吗?这种方法的缺点是什么(超过几秒static_cast)

c++

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

有关崩溃安全和容错编程的资源

我喜欢LWN文章"Crash-only software",我想了解更多关于崩溃安全和容错编程的知识.

令人惊讶的是,很难确保持久状态在故障情况下是一致的.在这里,我甚至不讨论分布式操作:在单个节点上也很难:如果系统崩溃,即使是正常的Berkeley DB(BDB数据存储或BDB并发数据存储)也可能有一个被破坏的数据库.不仅高级应用程序约束被破坏,如果系统崩溃,数据库可能无法正确打开.

什么是关于崩溃安全和容错设计,方法和编程的良好资源.

如果资源专注于C++和POSIX环境,我将不胜感激.

c++ crash posix fault-tolerance

15
推荐指数
2
解决办法
1962
查看次数

在运行时获取C++对象名称

我可以在运行时获取对象的名称(比如通过RTTI获取对象的类型)吗?我希望对象能够打印其名称.

谢谢.

c++ runtime

14
推荐指数
4
解决办法
2万
查看次数

Java中的NFS服务器

我在Java中搜索像NFS这样的网络(或分布式)文件系统的实现.目标是扩展它并用它做一些研究.在网络上我发现了一些实现,例如DJ NFS,但开放的问题是它们的成熟和快速程度.

任何人都可以有一个良好的起点,有没有人经历过这样的事情?

PS我知道Hadoop DFS并且我将它用于某些项目,但是Hadoop并不适合我想要做的事情.

--EDIT-- Hadoop真正专注于高度可扩展的高吞吐量计算,没有覆盖文件部分的可能性.目标是您可以使用文件系统,例如用户主目录.

--EDIT--更多细节:想法是修改这样的实现,以便文件不直接存储在本地文件系统上,而是应用重复数据删除.

java filesystems

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

避免使用std :: bad_alloc.new应返回NULL指针

我将一个中等大小的应用程序从C转移到C++.它不会处理异常,也不会改变.

我(错误!)对C++的理解是(直到我昨天很难学会),(默认)new运算符在分配问题时返回NULL指针.然而,直到1993年(左右)才真实.如今,它会抛出一个std :: bad_alloc异常.

是否有可能在不重写所有内容的情况下返回旧行为,在每次调用时使用std :: nothrow?

c c++ memory-management

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

字对齐加载比x64处理器上的未对齐加载更快吗?

在x86/64(Intel/AMD 64位)处理器上,在字边界上对齐的变量是否比未对齐的加载操作更快?

我的一位同事辩称,未对齐的载荷很慢,应该避免.他引用了项目填充到结构中的单词边界,作为未对齐加载缓慢的证明.例:

struct A {
  char a;
  uint64_t b;
};
Run Code Online (Sandbox Code Playgroud)

结构A通常大小为16个字节.

另一方面,Snappy压缩器文档指出Snappy假设"未对齐的32位和64位加载和存储很便宜".根据源代码,英特尔32和64位处理器也是如此.

那么:这里的真相是什么?如果和未对齐的载荷减少多少?在哪种情况下?

c x86-64 alignment

6
推荐指数
3
解决办法
4822
查看次数

声明用锁重新排序

这里有一些C++代码可以从多个线程并行访问.它有一个关键部分:

lock.Acquire();
current_id = shared_id;
// small amounts of other code
shared_id = (shared_id + 1) % max_id;
lock.Release();
// do something with current_id
Run Code Online (Sandbox Code Playgroud)

lock变量的类是POSIX互斥实现的包装器.由于模块操作,不可能使用原子操作.

带有O3标志的gcc编译器是否可能优化代码,以便在锁定之前移动current_id的赋值?

c++ concurrency

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

Linux 中的基名_r/目录名_r

某些 POSIX 函数不是线程安全的。示例包括目录名和路径名。

dirname() 函数不需要是可重入的。不需要可重入的函数不需要是线程安全的。

在某些平台上,目录名和路径名有可重入版本:dirname_r和 pathname_r。据我发现,Linux 上的目录名和路径名没有可重入版本。

  • 那是对的吗?
  • 还有什么选择呢?

linux filesystems posix

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

写出可以从Elephant Bird的ProtobufPigLoader读取的数据

对于我的一个项目,我想分析大约2 TB的Protobuf对象.我想通过"大象鸟"库在Pig脚本中使用这些对象.但是,我不清楚如何将文件写入HDFS,以便ProtobufPigLoader类可以使用它.

这就是我所拥有的:

猪脚本:

  register ../fs-c/lib/*.jar // this includes the elephant bird library
  register ../fs-c/*.jar    
  raw_data = load 'hdfs://XXX/fsc-data2/XXX*' using com.twitter.elephantbird.pig.load.ProtobufPigLoader('de.pc2.dedup.fschunk.pig.PigProtocol.File');
Run Code Online (Sandbox Code Playgroud)

导入工具(部分):

def getWriter(filenamePath: Path) : ProtobufBlockWriter[de.pc2.dedup.fschunk.pig.PigProtocol.File] = {
  val conf = new Configuration()
  val fs = FileSystem.get(filenamePath.toUri(), conf)
  val os = fs.create(filenamePath, true)
  val writer = new ProtobufBlockWriter[de.pc2.dedup.fschunk.pig.PigProtocol.File](os, classOf[de.pc2.dedup.fschunk.pig.PigProtocol.File])
  return writer
}
val writer = getWriter(new Path(filename))
val builder = de.pc2.dedup.fschunk.pig.PigProtocol.File.newBuilder()
writer.write(builder.build)
writer.finish()
writer.close()
Run Code Online (Sandbox Code Playgroud)

导入工具运行正常.我有一些ProtobufPigLoader的问题因为我不能使用hadoop-lzo压缩库,并且没有修复(见这里)ProtobufPigLoader不起作用.我遇到问题的问题是DUMP raw_data;退货Unable to open …

hadoop apache-pig elephantbird

5
推荐指数
0
解决办法
1002
查看次数

从DTrace脚本调用C函数

DTrace是源自Solaris的令人印象深刻,功能强大的跟踪系统,但它被移植到FreeBSD和Mac OSX.

DTrace使用名为D的高级语言,与AWK或C不同.以下是一个示例:

io:::start
/pid == $1/
{
    printf("file %s offset %d size %d block %llu\n", args[2]->fi_pathname, 
        args[2]->fi_offset, args[0]->b_bcount, args[0]->b_blkno);
}
Run Code Online (Sandbox Code Playgroud)

使用命令行sudo dtrace -q -s <name>.d <pid>记录源自该进程的所有IO.

我的问题是,是否以及如何在跟踪本身期间从DTrace脚本调用自定义C函数以使用该跟踪数据执行高级操作.

dtrace

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

使用maven的示例代码存档

该项目是一个包含核心库代码,测试和示例代码的库.在构建过程结束时,应创建以下存档:

  • xy-1.1.0-core.jar
  • xy-1.1.0-tests.jar
  • xy-1.1.0-examples.jar

用maven设置它的最佳方法是什么?目前的设置是:

src
src/main/java
src/examples/java
src/test/java
Run Code Online (Sandbox Code Playgroud)

此外,应该有一个lib包含所有依赖项的目录.应将xy-jars,库jar和其他脚本打包到发布文件中xy-1.1.0.tar.gz.

java maven-2 build

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

如何从 Rust 调用 _mm256_mul_ph ?

_mm256_mul_ps是“乘法打包单精度(32 位)浮点元素”的 Intel 内在函数。_mm256_mul_ph是“乘法打包半精度(16 位)浮点元素”的内在函数。

我可以_mm256_mul_ps使用 using 来调用use std::arch::x86_64::*;,例如

#[inline]
fn mul(v: __m256, w: __m256) -> __m256 {
     unsafe { _mm256_mul_ps(v, w) }
}
Run Code Online (Sandbox Code Playgroud)

不过,似乎很难调用_mm256_mul_ph。可以调用_mm256_mul_phRust 吗?

intrinsics rust avx512 half-precision-float

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

为什么我分配的缓冲区大小不合适?

我使用了fread函数,我得到了一个4的缓冲区和一个"读错误".

为什么我buffer不是fileSize

这是我的代码:

FILE *fp;
char* buffer;
fp = fopen("help.txt","r");
if (fp == NULL){
    fputs("Can't open Help file, Help.txt",stderr);
exit(1);
}
fseek(fp, 0, SEEK_END);
long fileSize = ftell(fp);
rewind(fp);

buffer = (char*) malloc (sizeof(char)*fileSize);
if(buffer == NULL){
    fputs("Memory Allocation Error",stderr);
    exit(2);
}

size_t result = fread(buffer,1,fileSize,fp);
if(result != fileSize){
fputs("Reading error\n",stderr);
printf("File Size : %lu\n",fileSize);
printf("Result : %lu\n",result);
printf("Buffer Size : %u\n",sizeof(buffer));
exit(3);
}

fputs(buffer,stdout);

fclose(fp);
free (buffer);
Run Code Online (Sandbox Code Playgroud)

这是我运行程序时的输出:

Reading error
File Size : 224
Result …
Run Code Online (Sandbox Code Playgroud)

c++ file-io

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