小编Rom*_*nko的帖子

失败的malloc()的单元测试

单元测试涉及失败的代码路径的最佳方法是什么malloc()?在大多数情况下,它可能并不重要,因为你正在做类似的事情

thingy *my_thingy = malloc(sizeof(thingy));
if (my_thingy == NULL) {
  fprintf(stderr, "We're so screwed!\n");
  exit(EXIT_FAILURE);
} 
Run Code Online (Sandbox Code Playgroud)

但在某些情况下,除了死亡之外你还有其他选择,因为你已经为缓存或其他任何东西分配了一些额外的东西,你可以收回那些记忆.

但是,在那些您可以尝试从失败malloc()中恢复的情况下,您在代码路径中执行的操作非常棘手并且容易出错,这使得测试变得尤为重要.你是怎么做到这一点的?

c unit-testing memory-management libc

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

将动态数组包装到STL/Boost容器中?

我需要将一个动态分配的数组(例如从a = new double [100])包装到std :: vector(最好)而不复制数组.这个限制强加于我想要包装的数组是从文件中进行mmaped,所以只做vector(a,a + size)会使内存使用量加倍.

这样做有什么窍门吗?

c++ arrays containers boost vector

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

PMD"Bean成员应序列化"规则.我们能以更聪明的方式做到吗?

这是(可能对某人有用)" Bean成员应该序列化 "PMD规则,其中规定了以下内容:

如果一个类是bean,或者由bean直接或间接引用它,则需要可序列化.成员变量需要在类中标记为transient,static或者具有访问器方法.将变量标记为瞬态是最安全和最简单的修改.访问器方法应遵循Java命名约定,即对于名为foo的变量,应提供getFoo()和setFoo()访问器方法.

问题是它目前既没有检查'类是bean,也没有被bean引用'甚至检查类实现'Serializable'接口.因此,在没有访问器的情况下使用几个私有字段的简单类(即使类是最终的),您将获得Sonar标记的主要缺陷.对于大多数课程,它看起来很有趣,所以目前我肯定会停用此规则.

但我确实喜欢检查真正的bean类.是否有可能(以及如何)使用Sonar和开源分析仪的"标准集"(CheckStyle,PMD,findbugs)进行类似(但更智能)的检查?有没有其他方法可以这样做?

java serialization code-analysis pmd javabeans

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

如何正确忽略Java中的异常?

我们都会不时编写这样的代码:

try {
  // ... some code.
} catch (SomeException e) {
  // ... No action is required, just ignore.
}
Run Code Online (Sandbox Code Playgroud)

有没有像注释这样的标准代码片段来表明我们真的打算忽略异常?向其他团队成员和静态分析器展示的东西我们真的需要像InterruptedException以后一样跳过这种情况Thread.sleep()吗?就像是:

Exception.ignore(e);
Run Code Online (Sandbox Code Playgroud)

谷歌搜索但没有找到这种情况的标准.

这与确保例外的测试特别相关:

try {
    action();
    fail("We expected this to fail.");
} catch (ExpectedException e) {
    ignore(e, "OK, so far so good.");
}
Run Code Online (Sandbox Code Playgroud)

java exception

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

在GCC中编译时使用`-Wextra`标志的缺点

我知道应该总是用两者编译-Wall并且-Wextra因为它们启用警告并帮助我们理解我们的错误,如果有的话.

我已经读过-Wextra不建议使用编译器标志,因为它太冗长了很多误报.

读这篇文章我很惊讶.所以我开始谷歌搜索它,但我没有得到任何答案,因为所有搜索结果显示" -Wextra旗帜做什么?".

所以,我的问题是

  • 在哪种情况下,-Wextra旗帜会发出不必要的警告?
  • 是否可以阻止该-Wextra标志启用导致GCC发出这些类型警告的其他标志?

c gcc code-analysis compiler-flags compiler-warnings

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

静态分支预测/ GCC优化

考虑以下C程序:

void bar();
void baz();

void foo( int a ) {
    if ( a ) {
        bar();
    }
    else {
        baz();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的基于x86-64的计算机上,GCC使用-O1优化级别生成的指令给出:

 0: sub    $0x8,%rsp
 4: test   %edi,%edi
 6: je     14 <foo+0x14>
 8: mov    $0x0,%eax
 d: callq  12 <foo+0x12> # relocation to bar
12: jmp    1e <foo+0x1e>
14: mov    $0x0,%eax
19: callq  1e <foo+0x1e> # relocation to baz
1e: add    $0x8,%rsp
22: retq
Run Code Online (Sandbox Code Playgroud)

而添加-freorder-blocks优化参数(包含在-O2中)会将代码转换为:

 0: sub    $0x8,%rsp
 4: test   %edi,%edi
 6: jne    17 <foo+0x17>
 8: mov    $0x0,%eax
 d: …
Run Code Online (Sandbox Code Playgroud)

c optimization assembly gcc x86-64

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

限制纱线中每个应用程序同时运行的容器数量

假设一个 yarn 应用程序有长时间运行的任务(运行 1 小时或更长时间)。当一个 MR 作业启动时,所有集群资源都会被阻塞,至少在一个容器完成之前,这有时可能需要很长时间。

有没有办法限制同时运行的容器数量?类似的东西,例如 map.vcores.max(每个 NM,或全局)。所以其他应用程序不会被阻止。

有任何想法吗?

附:Hadoop 2.3.0

java hadoop scheduling distributed-computing hadoop-yarn

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

自定义malloc()实现头设计

我试图在C中编写一个自定义分配器用于调试目的(作为练习),我将使用单个链表来使用First Fit算法将自由列表保存在一起.我在下面展示了我想在"空内存节点"中创建的结构.

如何在内存的前几个字节处编写头块(一个特定的联合),我得到(我使用malloc()来初始获得一块内存)以便剩余的字节是空闲的?

这是我正在使用的联盟:

/*Define Header Structure for proper alignment*/
union header {
struct{
    union header* next;
    unsigned size ; /*Make it size_t*/
}s; 
double dummy_align_var;
};

-------------------------------------------------------------------------------
|Next        |Size of  |16Byte| User is concerned only about |16Byte|         |
|Free Memory |Allocated|Header| this portion  of memory      |Footer|Checksum |
|Address     |Block    |Picket| and has no knowledge of rest |Picket|         |
-------------------------------------------------------------------------------
|-------Header---------|      ^Address Returned to user
                              ^------User Requested Size-----^
^-------------Memory Obtained From The Operating System-----------------------^
*/
Run Code Online (Sandbox Code Playgroud)

[编辑]根据提供的建议更改块结构.

c memory malloc memory-management allocation

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

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

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

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

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

c c++ memory-management

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

睡眠/纳米睡眠是否通过忙碌的等待计划工作?

我想知道睡眠/纳米睡眠是如何实现的?考虑以下代码:

{ // on a thread other than main() thread
  while(1)
  {
    //do something
    sleep(1);
  }
}
Run Code Online (Sandbox Code Playgroud)

CPU是否会进行恒定的上下文切换以检查是否完成了1秒的睡眠(即内部忙等待).

我怀疑这种方式是否有效,效率太低.但那又如何运作?

同样的问题适用于nanosleep.

注意:如果这是特定于实现/操作系统的,那么我怎样才能实现一个不会导致上下文切换的更有效的方案呢?

c c++ posix sleep

6
推荐指数
2
解决办法
3270
查看次数