我有一个相当令人担忧的 git 问题。
几天前,当服务器 git 蓝屏时,我正在提交一些更改。(我们认为它实际上是由 git 引起的。)
从那以后,我无法向存储库提交任何更改,而其他人可以。当服务器崩溃时,我无法再提交对我正在提交的文件的更改,但是我可以提交对其他文件的更改。
我尝试创建一个新目录并克隆到其中。以及git stash, git pull --rebase, git stash apply.
无论如何,当我现在尝试提交服务器蓝屏时提交的文件时,服务器返回错误:
$ git push -v
Pushing to http://bjury1@server:7990/scm/project.get
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 745 bytes | 0 bytes/s, done.
Total 7 (delta 6), reused 0 (delta 0)
POST git-receive-pack (881 bytes)
To http://bjury1@server:7990/scm/project.get
! [remote rejected] master -> master (missing necessary objects)
error: …Run Code Online (Sandbox Code Playgroud) 我需要创建一个与 64 字节边界对齐的数组。我需要这样做,因为我正在调用一个使用AVX的 DLL ,这需要对齐数据。本质上我需要在 C# 中执行此操作:
void* ptr = _aligned_malloc(64 * 1024, 64);
int8_t* memory_ptr = (int8_t*)ptr;
Run Code Online (Sandbox Code Playgroud)
我很确定我无法在 C# 中自然地创建这样一个边界的数组。因此,一种选择是创建一个 x+64 长的字节数组,然后“创建”一个覆盖它的数组,但在所需边界处有一个偏移量。
问题是如何实现这一点,并且不会出现内存泄漏?(内存泄漏是我不想使用 DLL 创建对数组的引用并将其传递给 C# 的原因。除非有一个好的方法可以这样做?)
使用下面有用的答案,这就是我所拥有的,希望它对其他人有帮助:
public class Example : IDisposable
{
private ulong memory_ptr;
public unsafe Example()
{
memory_ptr = (ulong)NativeMemory.AlignedAlloc(0x10000, 64);
}
public unsafe Span<byte> Memory => new Span<byte>((void*)memory_ptr, 0x10000);
public unsafe void Dispose()
{
NativeMemory.Free((void*)memory_ptr);
}
}
Run Code Online (Sandbox Code Playgroud)