作为一名经验丰富的程序员,我觉得非常愚蠢地问这样一个问题:是否有一个循序渐进的教程解释如何在LLVM-Assembly语言中编写"Hello World"程序,从而产生一个简单的"hello.exe",它可以是在标准Windows PC上执行?
我按照了几十个这样的教程解释了如何签出,制作,编译llvm等等.但要么他们需要一些其他的软件(导致另一个教程 - 马拉松),或者他们最终得到一些"Path/File/Dll not found" -Error(导致另一个教程-Marathon).我实现了让llvm.exe执行...一次.现在Windows报告应用程序崩溃了?!
现在我感到迷失在过时的教程,错误,不兼容,模拟器/虚拟机,IDE,交叉链接,32对64位,带/出WinGW,带/出Cygwin,带/出Visual Studio,带/出的迷宫中clang,experimental,not supported,missing环境变量等
我希望找到一个安装程序或存档,其中包含一堆预编译的dll和exe文件,这些文件可以通过命令行开箱即用.我只想使用一个裸llvm工具集 - 没有铿锵声,没有Visual Studio(如果可能的话) - 就像javac.exe,masm.exe,fasm.exe,link.exe,...
如果我必须自己编译llvm,通过Eclipse-CDT实现这一点的可能性会很大 - 我无法在没有任何FileNotFound-Errors的情况下导入Project; 这与目录结构的一些特定于make的不兼容性有关... cmake应该已经解决了这个问题,但到目前为止我发现的唯一一个教程是关于cmake-gui - 由于其他一些原因而无法安装...
有人可以指点我一个关于如何获得工作llvm-as.exe的最新教程,或者写一个逐步指导他/她如何实现上述目标?
在此先感谢 - 到目前为止我失去了三天:/
我缺少针对特定问题的某种收集功能.
我想从关于问题背景的一些信息开始 - 也许有一种更优雅的方法来解决它,这并不是我遇到的具体问题的结束:
我正在建模由四面体单元构成的体网格(2D模拟将是三角形网格).如果两个四面体共用一个三角形面(占据三个顶点),则认为它们是相邻的.我的应用程序必须能够通过它们的共同面孔从一个单元格导航到另一个单元格
为了满足一些其他要求,我不得不将面分成两个所谓的半面,它们共享相同的顶点,但属于不同的单元并具有相反的方向.
应用程序需要能够进行这样的调用(Face模型是半面的):
Cell getAdjacentCell(Cell cell, int faceIndex) {
Face face = cell.getFace(faceIndex);
Face partnerFace = face.getPartner();
if (partnerFace == null) return null; // no adjacent cell present
Cell adjacentCell = partnerFace.getCell();
return adjacentCell;
}
Run Code Online (Sandbox Code Playgroud)
getPartner()-method 的实现是有问题的方法.我的方法如下:
Face-objects可以创建某种不可变对象 - Signature仅包含顶点配置,方向(顺时针(cw)或逆时针(ccw))和对原始Face对象的反向引用.Face.Signature对象被认为是相等的(@Override equals()),如果它们占据相同的三个顶点 - 无论它们的方向和相关的单元格如何.
我在Mesh-objects中创建了两个集合,以包含按其方向分组的所有半面:
Set<Face.Signature> faceSignatureCcw = new HashSet<Face.Signature>();
Set<Face.Signature> faceSignatureCw = new HashSet<Face.Signature>();
Run Code Online (Sandbox Code Playgroud)
现在我能够确定合作伙伴是否存在......
class Face {
public Face getPartner() {
if (this.getSignature().isCcw()) {
boolean partnerExists …Run Code Online (Sandbox Code Playgroud) 我正在为DNG / TIFF文件编写读写器。一般而言FileInputStream,有几种处理文件的选项(FileChannel,RandomAccessFile),我不知道哪个策略是适合我的需要。
DNG / TIFF文件由以下内容组成:
整个文件的大小范围从15 MiB(压缩的14位原始数据)到大约100 MiB(未压缩的浮点数据)。要处理的文件数为50-400。
有两种使用模式:
我目前正在使用,FileChannel并执行map()来获取MappedByteBuffer覆盖整个文件的信息。如果我只想读取元数据,这似乎很浪费。另一个问题是释放映射的内存:当我四处传递映射缓冲区的切片以进行解析等时,底层MappedByteBuffer将不会收集。
我现在决定FileChannel使用几种read()方法复制较小的块,并仅映射大的原始数据区域。缺点是读取单个值似乎非常复杂,因为没有readShort()诸如此类:
short readShort(long offset) throws IOException, InterruptedException {
return read(offset, Short.BYTES).getShort();
}
ByteBuffer read(long offset, long byteCount) throws IOException, InterruptedException {
ByteBuffer buffer = ByteBuffer.allocate(Math.toIntExact(byteCount));
buffer.order(GenericTiffFileReader.this.byteOrder);
GenericTiffFileReader.this.readInto(buffer, offset);
return buffer;
}
private void readInto(ByteBuffer buffer, long startOffset)
throws IOException, InterruptedException {
long offset …Run Code Online (Sandbox Code Playgroud) 我们的应用程序性能不佳,因此我们使用飞行记录器的方法分析来查看时间花在哪里。它基本上可以工作,但是一分钟的记录中采集的样本数量远低于 100 个。(使用“分析”预设)
我使用了一个简单的示例应用程序(对随机数求和)进行比较,一分钟或记录生成约 6000 个样本 - 这对我来说似乎是正确的。
首页上有几个警告,例如:内存消耗高,异常异常。但该应用程序基本上可以正常工作,因此这可能是一个转移注意力的事情。
我已经通过增加数量解决了“堆栈深度截断”问题。
我的猜测:要么飞行记录器配置错误,要么时间实际上没有花在代码上而是花在其他任务上。cpu 在运行期间非常繁忙,所以我不认为所有线程都在等待。
请让我知道哪些信息可能很重要,以便我可以添加它们。
(这是一个用 Scala 编写的 Web 框架库,使用 Jetty 作为 Web 服务器;Oracle JDK 8)
java ×2
performance ×2
assembly ×1
collections ×1
eclipse-cdt ×1
filechannel ×1
flamegraph ×1
llvm ×1
windows ×1