将使用不同 GCC 版本编译的源生成的对象链接到共享库是否安全?
我想不会,但是万一使用的 GCC 在代码生成和优化改进方面没有区别呢?有信息可以知道哪个 GCC 编译器不向后兼容吗?
我的问题也涉及二进制文件,我查看了
https://gcc.gnu.org/onlinedocs/gcc/Compatibility.html
据我了解,不同的GCC版本只要符合相同的ABI就可以兼容
我已经运行了这个DisruptovsFJ Mirco-Benchmarks Aleskey Shipilev,其中ForkJoin和Disruptor库的性能进行了比较.
我在Linux平台i5上使用JDK1.8.40的结果:
Benchmark Score, Score Error (99.9%),Unit,Param: slicesK,
Disruptor.run, 939.801405, 20.741961,ms/op, 50000,0,10
ForkJoin.run, 1175.263451, 0.595711, ms/op, 50000,0,10
ForkJoinRecursive.run 771.854028, 26.022542,ms/op, 50000,0,10
ForkJoinRecursiveDeep.run, 1356.697011, 28.666325,ms/op, 50000,0,10
ForkJoinReuse.run, 7974.180793, 49.604539,ms/op, 50000,0,10
Run Code Online (Sandbox Code Playgroud)
slicesK < 50000预期结果的第一部分Disruptor是使用RingBuffer和一种使其在并发上下文中高效的机制.
现在,当slicesK >= 50000该Disruptor测试比ForkJoinRecursiveDeep,并ForkJoinReuse少高性能.有人可以向我解释那些结果吗?谢谢
在GCC原子内置我发现__atomic_exchange功能确实有第三个参数INT memorder,这可能需要的一个值__ATOMIC_RELAXED,__ATOMIC_SEQ_CST,__ATOMIC_ACQUIRE,__ATOMIC_RELEASE,和__ATOMIC_ACQ_REL。
__ATOMIC_RELAXED:暗示没有线程间排序约束。
我不确定怎么会发生,这不是原子操作,因此不会有任何线程间排序吗?
我正在使用这个内置的原子方法链接 提到:
以下内置函数大致符合 C++11 内存模型的要求。
但是,我尝试使用std=C99和编译这些方法std=C89。程序编译,我得到正确的结果。有什么我在这里想念的吗?C99和是否也C89有内存模型?
我正在尝试编写一个java代码,它返回一个结合了字符和重音的单个字符.组合的实际结果是字符串而不是单个字符.以下是一个简单的方法来说明我想要做的事情.谢谢
private char convert (char c)
{
if (c == '\u0130')
{
return '\u0069 \u0307'; // If the return value is String I get i.
} //I need small i double dot
else return c;
}
Run Code Online (Sandbox Code Playgroud) 如何获取Argument的值来实现这样的方法.argument.nameOfTheMethod().我想在这个参数上使用一个条件来编写这个方法的代码.
例如:
"foo".charAt()
Run Code Online (Sandbox Code Playgroud)
如何charAt获取价值"foo"?
我是JMH和基准测试的新手.我已经编写了一个public byte [] getBytes(String charsetName)方法的小测试.然而,maven无法建立.这是我的代码:
package org.openjdk.jmh.samples;
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Thread)
public class Test
{ @GenerateMicroBenchmark
public byte [] testgetbyte (String Str)
{
byte[] bytes = Str.getBytes("ISO-8859-1");
return bytes;
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(Test.class.getSimpleName())
.warmupIterations(5)
.measurementIterations(5)
.forks(1)
.build();
new Runner(opt).run();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行:mvn clean install.我收到Build failure错误消息.
我一直在研究 jmh 实现“多线程”基准的方式。根据我的理解,注释@Group("Identifier")和@GroupThreads(thread_number)启用同一组内的基准测试并行运行。
@Benchmark
@Group("parallel")
@GroupThreads(1)
public void benchmark_1() {
while(true) {}
}
@Benchmark
@Group("parallel")
@GroupThreads(1)
public void benchmark_2() {
while(true) {}
}
Run Code Online (Sandbox Code Playgroud)
使用 CPU 监视器,我发现两个 CPU 已充分使用。我想知道跑步者如何解释这些注释。