小编bob*_*uba的帖子

在c ++ 11中复制常量数组的最简洁方法

我经常发现自己想要复制具有恒定大小的数组的内容,我通常只是写下以下内容:

float a[4] = {0,1,2,3};
float b[4];

for(int i=0; i<4; i++){
    b[i]=a[i];
}
Run Code Online (Sandbox Code Playgroud)

最近,我正在编写一个用于教育目的的线性微积分库,我想知道是否有更好的方法来实现它.

我想到的第一件事就是使用memcpy:

memcpy(b, a, sizeof(float) * 4);
Run Code Online (Sandbox Code Playgroud)

但这看起来很像c-like而且容易出错.我喜欢在编译时遇到错误,对于具有非平凡复制构造函数的数据类型,或者如果我忘记与sizeof(datatype)相乘,这会变得很难看.

由于我正在编写一个我将要密集使用的数学库,因此性能对我来说非常重要.今天的编译器是否足够聪明,可以理解第一个例子只是复制一块内存并将其优化为与第二个解决方案一样高效?

也许标准库中有一个功能可以帮助我?c ++ 11中的新东西?或者我应该只创建一个宏或模板函数?

c++ arrays optimization copy c++11

40
推荐指数
4
解决办法
7万
查看次数

什么寄存器必须由x86函数保留?

我在x86程序集中编写一个函数,应该可以从c代码中调用,我想知道在返回调用者之前我必须恢复哪些寄存器.

目前我只恢复espebp,而返回值是eax.

还有其他我应该关注的寄存器,还是我可以留下任何令我高兴的东西?

x86 assembly calling-convention

14
推荐指数
2
解决办法
3573
查看次数

unix fork exec序列真的和听起来一样昂贵吗?

我正在阅读forkexec考试,我的书说,无论何时需要在unix系统中运行一个新的(不同的)进程,你都会分叉当前进程,然后是execve.

但是,它还表示无论何时fork调用,父级的整个内存映像都将复制到新进程.

然后我的问题是:如果你的进程有一个非常大的内存映像,你只想运行一个新进程怎么办?如果您要立即替换它,从父进程复制所有数据不是浪费资源吗?

unix fork process exec

13
推荐指数
2
解决办法
2106
查看次数

如何编写可重用的glsl代码?

我的着色器通常共享许多相同的功能.例如,漫反射/镜面反射照明的计算.我想写一次,然后在不同的着色器中重用代码.

Glsl不了解文件,也不支持类似c的#include预处理器指令.

我知道glsl支持从多个cstrings编译源代码,但是你怎么知道要包含哪些cstrings?你实现了自己的包含版本吗?或者你为每个着色器创建某种元文件?

code-reuse preprocessor glsl include

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

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

如何使用 Play 应用程序签名和应用程序包设置 Unity 应用程序并将其部署到 Google Play?

使用应用程序捆绑包和 Play 应用程序签名是目前 Google 推荐的在 Google Play 上部署新应用程序的方式。从 2021 年 8 月开始,新应用程序将强力使用这些格式。

如何在 Unity 中进行设置,以及如何在 Google Play 中配置应用程序?

android unity-game-engine google-play android-app-signing google-play-console

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

为什么有人会使用最适合的内存分配?

我正在阅读Andrew Tanenbaum的现代操作系统,他写道,最佳拟合是一种广泛使用的内存分配算法.他还写道,它比第一次适合/下一次适合要慢,因为它必须搜索整个分配的内存列表.并且它往往会浪费更多的内存,因为它在内存中留下了许多小的无用空白.

为什么它被广泛使用?这是一个我忽略的明显优势吗?

memory-management

4
推荐指数
2
解决办法
8129
查看次数

不使用 ObjectOutputStream 复制可序列化对象

我已经成功地使用 ObjectOutputStream 和 ObjectInputStream 来序列化和反序列化我正在编写的服务器和客户端的对象。服务器和客户端通常在两台不同的机器上,但由于它将是一个回合制纸牌游戏,我也希望用户在本地玩,然后客户端和服务器将在同一台机器上运行。

现在,我正在编写我的连接接口的替代实现。接口包含 void sendToServer(Object) 和 Object receiveFromServer() 等方法

通常 sendToServer(Object) 函数只会通过 ObjectOutputStream 发送对象,但由于对象在同一台机器上,我可以创建一个对象队列,并在每次调用发送或接收时推送和弹出。然而,问题是我不希望客户端引用服务器使用的对象,我希望它是一个副本。而且我没有复制构造函数,并且对象不可克隆。

在我的情况下你会怎么做?

java serialization objectoutputstream

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