小编mat*_*tiu的帖子

咳嗽记忆消毒剂; 如何使其打印源行号

我正在编译我的程序,clang++ -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -O0当我运行它时,输出是:

matiu@matiu-laptop:~/projects/json++11/build$ ./tests 
.......==10534== WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7fe7602d4a51 (/home/matiu/projects/json++11/build/tests+0x106a51)
    #1 0x7fe7602dfca6 (/home/matiu/projects/json++11/build/tests+0x111ca6)
    ...
    #31 0x7fe75edbaec4 (/lib/x86_64-linux-gnu/libc.so.6+0x21ec4)
    #32 0x7fe7602808dc (/home/matiu/projects/json++11/build/tests+0xb28dc)

  Uninitialized value was created by a heap allocation
    #0 0x7fe76026e7b3 (/home/matiu/projects/json++11/build/tests+0xa07b3)
    #1 0x7fe7602ee7da (/home/matiu/projects/json++11/build/tests+0x1207da)
    ...
    #18 0x7fe7602c1c4c (/home/matiu/projects/json++11/build/tests+0xf3c4c)
    #19 0x7fe7602873fa (/home/matiu/projects/json++11/build/tests+0xb93fa)

SUMMARY: MemorySanitizer: use-of-uninitialized-value ??:0 ??
Exiting
Run Code Online (Sandbox Code Playgroud)

如何让它显示像美丽的例子中的行号:http://clang.llvm.org/docs/MemorySanitizer.html

我怀疑它可能是不可能的,因为我的pragram是一群巨大的嵌套lambda:https://github.com/matiu2/json--11/blob/master/tests.cpp

clang++ msan

14
推荐指数
1
解决办法
2769
查看次数

如何使用cmake将编译器命令行args放在特定的地方

所以我正在用两个静态库构建一个共享库.

这个答案说这样做的方法是-Wl,--whole-archive在我的静态库之前插入,然后插入-Wl,--no-whole-archive它们.

那么我目前在cmake中为共享库提供的是:

add_library(wittyPlus SHARED empty.cpp)
target_link_libraries(wittyPlus 
    ${wtdbosqlite}
    ${WT_LIBRARIES}
    ${DB_LIBRARIES}
    ${Boost_LIBRARIES}
    app models
)
Run Code Online (Sandbox Code Playgroud)

所以,我需要的是为它加上-Wl,--whole-archive之前appmodels,然后-Wl,--no-whole-archive在他们之后(以标准库进口不要被共享库导出).

在CMake中最简单的方法是什么?


另外:所以我想尽可能多地使用标准的cmake东西,这样我就不需要为Windows构建做任何额外的工作,因为CMake会删除平台上不支持的编译器定义.建成.

gnu g++ cmake ld

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

伪造的堆栈比真正的堆栈更快

我正在做一些递归解析.

目前我有一个假堆栈,我在那里为我的有限状态机存储状态,所以当我递归地向下钻取时我按下我所处的状态,并在我完成处理递归的文本后稍后弹出它.

拥有'state id'堆栈会更快吗?

 int* stack = 0
 int top = 0;
 // ...
 // drill down bit
 if (stack == 0)
     stack = (int*)malloc(STACK_JUMP_SIZE);
 else if (top % STACK_JUMP_SIZE == 0)
     stack = (int*)realloc(stack, (top+STACK_JUMP_SIZE) * sizeof(int));
 stack[top++] = currentState;
 // ...
 // pop up later
 {currentState = stack[--top]; {
 if (top == 0) {
     free(stack);
     stack = 0;
 } else if ((top+1) % STACK_JUMP_SIZE == 0) {
     stack = (int*)realloc(stack, (top+1)*sizeof(int));
 }
Run Code Online (Sandbox Code Playgroud)

或者将事物拆分成适当的函数并让C++担心堆栈会更快.

(我知道有人会告诉我'那是C,它不是c ++',所以我先发制人地回答,我的程序是c ++但其中有很多c).

c c++ performance fsm

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

在写入该变量的唯一线程中,使用memory_order_relaxed加载原子变量是否安全?

我有一个写入原子变量的线程.(使用memory_order_release).线程A.

还有许多其他线程可以从该变量中读取.(使用memory_order_acquire).线程B.

在线程A中,使用memory_order_relaxed读取该变量是否安全?

c++ multithreading thread-safety c++11

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

标签 统计

c++ ×2

c ×1

c++11 ×1

clang++ ×1

cmake ×1

fsm ×1

g++ ×1

gnu ×1

ld ×1

msan ×1

multithreading ×1

performance ×1

thread-safety ×1