小编awi*_*ebe的帖子

为什么 C++ 中存在 delete[] 语法?

每次有人delete[]在这里问一个问题时,总会有一个非常笼统delete[]的回答:“ C++ 就是这样做的,使用”。来自普通的 C 背景,我不明白为什么需要一个不同的调用。

使用malloc()/free()您的选择是获取指向连续内存块的指针并释放连续内存块。实现领域中的某些东西会根据基地址知道您分配的块的大小,以便您何时必须释放它。

没有功能free_array()。我在与此相关的其他问题上看到了一些疯狂的理论,例如调用delete ptr只会释放数组的顶部,而不是整个数组。或者更正确的是,它不是由实现定义的。当然……如果这是 C++ 的第一个版本,并且您做出了一个有意义的奇怪设计选择。但是为什么 with$PRESENT_YEAR的 C++ 标准没有被重载???

似乎 C++ 添加的唯一额外的一点是遍历数组并调用析构函数,我认为这可能是它的症结所在,它实际上是使用一个单独的函数来为我们节省单个运行时长度查找,或者nullptr在列表的末尾,以换取折磨每个新的 C++ 程序员或程序员,他们有一个模糊的一天并且忘记了有一个不同的保留字。

如果除了“这就是标准所说的并且没有人质疑它”之外还有其他原因,有人可以一劳永逸地澄清吗?

c++ syntax standards memory-management language-lawyer

125
推荐指数
4
解决办法
9702
查看次数

在Java中,当我调用OutputStream.close()时,我是否总是需要先调用OutputStream.flush()?

如果我只是close()在输出流中调用,输出是保证的,还是需要我flush()总是调用?

java file-io

41
推荐指数
4
解决办法
3万
查看次数

sizeof是否返回C中某个类型的字节数或八位字节数?

简单地放入C和变体(与wuss java及其虚拟机不同),不同目标上的基元类型的大小可能会有很大差异,除非您使用定义的固定宽度类型stdint.h,否则实际上无法保证,甚至您的实现也是如此支持他们.

无论如何假设(因为在大多数现代机器上,一个字节是八位字节,为了网络目的,我​​假设(ASCII))sizeof是以字节还是以八位字节的形式返回数据类型的大小?

c byte sizeof word-size

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

Mac OS X如何知道哪些程序正在使用已安装的文件系统?

这可能听起来像一个愚蠢的问题,但直到最近,如果你试图卸载正在使用的卷,Finder报告它正在使用,但不是由谁.这是简单的Unix功能,如果文件在挂载点上打开,则不允许它弹出.但是现在他们似乎添加了一些功能,让用户知道当前正在使用已安装系统的程序,我一直在查看Unix的操作系统(Linux发行版)的fopen,stat等手册页,我可以似乎找不到类似的功能.

这个功能是专门的,还是我只是在错误的地方?

macos stat osx-snow-leopard unmount

9
推荐指数
1
解决办法
844
查看次数

数学接口与C++中的cMath

我的构建系统MacOS 10.6.3上用于POSIX数学库的接口是math.h,但是在我的目标系统上,接口文件的名称是cmath.h.在学校我们使用cmath,我想确保我的项目在交付时编译,这是如何实现的.学校的服务器和工作站是运行Windows XP的x86.GCC可在两个平台上使用.

c++ gcc cmath

9
推荐指数
1
解决办法
4669
查看次数

Raspberry PI 2上使用OpenSSL AES/GCM的性能非常差

我开发了一个简单的C++程序来测试OpenSSL AES/GCM调用到EVP接口的性能.它的作用是取一个1024字节的字符串,用密钥加密它,然后用相同的密钥加密结果,并一次又一次地加密.我正在使用增量4字节初始化向量.

当我在我的Macbook Pro(Intel i7)上测试它时,结果非常令人印象深刻:在一个内核上运行上述过程的1048576次迭代需要一秒钟.这是1 GB/s的加密速度.如果我们同时使用所有核心,则为8 GB/s(或多或少).

现在,我在Raspberry PI 2上移植了相同的基准测试.然而,当我运行它时,需要0.16秒来完成1024次迭代.在单核上,这或多或少为6 MB/s.

现在,我很明白,现代昂贵的i7处理器和在Raspberry上运行的小型ARM处理器之间存在着巨大的巨大差异,但仍然快170倍.因此,在假设Raspberry PI 2 真的那么糟糕之前,我想检查这些参数是否合理.

有没有人做过某种基准呢?Raspberry上6 MB/s的加密速度是否合理?或者我做错了什么?

(我通过我的Macbook USB给它供电:可能这么慢,因为它没有获得足够的功率?这听起来听起来不合理.它根本不会启动,对吧?或者可能有一个超频机制来省电吗?)

更新1:我openssl -evp speed aes-256-cbc在我的Macbook和Raspberry上做了.

在Macbook上:

type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc     534591.95k   564057.62k   566522.81k   570717.87k   574876.33k
Run Code Online (Sandbox Code Playgroud)

在覆盆子上:

type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc      14288.53k    16653.74k    17165.31k    17298.43k    17337.00k
Run Code Online (Sandbox Code Playgroud)

这仍然是因素33,但英特尔处理器可以使用硬件加速AES调用.不过,据我所知,GCM模式应该比CBC快得多.我不知道为什么但看起来没有一个用于GCM的openssl基准权利,但即使假设它们的表现相同,我也错过了一个因素3.

更新2检查此页面:http://elinux.org/RPi_Performance#OpenSSL.看起来我缺少10 MB/s以上.总计:使用AES/CBC(应该是)为27 MB/s,使用AES/GCM为6 MB/s(实际上是这样).

benchmarking openssl aes raspberry-pi

8
推荐指数
2
解决办法
4630
查看次数

退出方法时Java数组丢失

我对java比较陌生,没有指针的引用传递让我感到困惑.我为家庭作业编写了一个函数,要求我返回用户输入的长度,并将使用输入分配给传入的数组,当方法退出用户输入数组丢失时,出现了什么问题.

public static int readArray(char[] intoArray)
    {
        char[] capture = captureInputAsCharArray(); //User input comes back as char[]
        System.arraycopy(intoArray,0, capture, 0, capture.length);

        return capture.length;
    }

public static main(String[] args)
{
        size = readArray(arrItem7);  // item 7
        System.out.println(size);
        printOneInLine(arrItem7);  // prints individual elements of array
}
Run Code Online (Sandbox Code Playgroud)

java arrays reference

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

部分合并的 Git 工作流程?

我有两个分支deva。我需要将功能合并a到 中dev,但我的队友在一个文件中创建了某些功能,但尚未准备好合并。如果我只是使用我的合并和解析,git 会将此文件中的更改标记为无效,并且不会允许这些更改稍后合并,而是在我尝试重新合并分支时快进。如果我不解决冲突,git 将拒绝执行合并。

我解决此问题的策略是在旁边创建一个分支并抑制损坏的功能,然后合并到该分支中。问题是 git 命令变得有些复杂,所以我需要专家的帮助。

我希望如果可能的话将这种类型的操作概括为 git 扩展,我会调用一些达到git-cherrymerge.

步骤如下:

  1. 将用户指定的提交(也许这可以通过某种策略自动化)重放到临时分支上
  2. Git filter-branch 删除损坏的文件
  3. 压缩临时分支,添加自动提交消息
  4. 将临时分支合并到目标分支(这里是dev)

我不是filter-branchor方面的专家rebase,看起来我可以通过滥用它们来严重破坏历史

我想我的问题是

  1. 这会起作用还是有更好的规范方法来做到这一点?
  2. 我应该按什么顺序执行哪些 git 命令,以避免意外损坏我的存储库历史记录。

git version-control merge cherry-pick git-filter-branch

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