小编Isa*_*ods的帖子

循环条件中方法调用的效率

我正在编写一个游戏引擎,其中ArrayList使用for循环迭代a 中保存的一组对象.显然,效率是相当重要的,所以我想知道循环的效率.

for (String extension : assetLoader.getSupportedExtensions()) {
    // do stuff with the extension here
}
Run Code Online (Sandbox Code Playgroud)

getSupportedExtension()返回ArrayListString秒.我想知道的是,每次循环遍历新扩展时是否调用该方法.如果是这样,做以下事情会更有效率:

ArrayList<String> supportedExtensions = ((IAssetLoader<?>) loader).getSupportedExtensions();

for (String extension : supportedExtensions) {
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

?提前致谢.

java performance game-engine

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

ELF部分未按预期映射到段

我正在编写一个编译器,我刚开始从头开始生成ELF可执行文件.我正在创建一个.text部分(虽然它没有名称,因为我还没有创建一个字符串表),并试图将它放在一个PT_LOAD段中.但是,readelf并未报告该部分已映射到该段并objdump拒绝反汇编该.text部分中的代码.这是读数readelf,为简洁省略了一些位:

ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          122 (bytes into …
Run Code Online (Sandbox Code Playgroud)

compiler-construction x86-64 elf

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

从Rust调用一个原始地址

我在Rust中编写一个操作系统,需要直接调用我正在计算的虚拟地址(类型u32).我希望这相对简单:

let code = virtual_address as (extern "C" fn ());
(code)();
Run Code Online (Sandbox Code Playgroud)

然而,这抱怨演员阵容是非原始的.它建议我使用这个From特性,但我不知道这有多大帮助(尽管我对Rust来说相对较新,所以可能会遗漏一些东西).

error[E0605]: non-primitive cast: `u32` as `extern "C" fn()`
 --> src/main.rs:3:16
  |
3 |     let code = virtual_address as (extern "C" fn ());
  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: an `as` expression can only be used to convert between primitive types. Consider using the `From` trait
Run Code Online (Sandbox Code Playgroud)

注意:我掌握了一切libcore,但没有移植std,所以不能依赖任何不是no_std的东西

function-pointers osdev rust

5
推荐指数
1
解决办法
1475
查看次数

启动期间生成的 ELF 可执行段错误

我正在生成一个 ELF 可执行文件,其中 .text 部分加载到 LOAD 段中。它可以很好地反汇编,但是尝试在下面运行它gdb会给出During startup program terminated with signal SIGSEGV, Segmentation fault.

readelf 给出:

ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x400056
  Start of program headers:          759 (bytes into file) …
Run Code Online (Sandbox Code Playgroud)

compiler-construction posix elf

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

C++ 使用 copy_if

我是 C++ 新手,正在尝试使用该copy_if函数:

set<Person> people; // contains people objects

set<Person> copyedPeople;

string name = "joe"; // Multiple people with that name

copy_if(people.begin(), people.end(), copyedPeople, Person.getName() == name);
Run Code Online (Sandbox Code Playgroud)

问题出在Person.getName(),它说类型名称不允许?

c++ copy

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

带有“没有为构造构造函数提供足够数据”的平凡着色器

我有一个相当简单的顶点着色器:

#version 330 core

layout (location = 0) in vec2 position;
layout (location = 1) in vec2 uvCoord;

uniform mat4 view;
uniform mat4 projection;

out vec2 _uvCoord;

void main()
{
  gl_Position = projection * view * vec4(position, 1.0);
  _uvCoord = uvCoord;
}
Run Code Online (Sandbox Code Playgroud)

这是给出错误:

ERROR: 0:13: error(#174) Not enough data provided for construction constructor
ERROR: error(#273) 1 compilation errors.  No code generated
Run Code Online (Sandbox Code Playgroud)

我曾尝试在谷歌上搜索导致此类错误的原因,但无济于事。失败了,我仔细查看了着色器代码,但据我所知,它没有问题。

是什么导致了这种错误,我该如何修复这个着色器?

opengl glsl

-1
推荐指数
1
解决办法
3198
查看次数