我需要一个内存块的比较函数,用于对D编程语言中的字节数组进行二进制搜索.它不需要任何有用的语义.它只需要很快并且是一个有效的比较函数(产生总排序的函数).已知要比较的存储器块具有相同的长度.
C memcmp实际上非常慢,因为它试图保留有用的字符串比较语义,这是我不需要的.以下是迄今为止我提出的最佳方法.有没有人知道更好的事情,最好不要使用非便携式CPU特定指令?
// Faster than C's memcmp because it doesn't preserve any meaningful
// semantics. It's just a completely arbitrary, but really fast,
// comparison function.
int memoryCompare(const(void)* lhs, const(void)* rhs, size_t n) {
for(; n >= uint.sizeof; n -= uint.sizeof) {
if( *(cast(uint*) lhs) < *(cast(uint*) rhs)) {
return -1;
} else if( *(cast(uint*) lhs) > *(cast(uint*) rhs)) {
return 1;
}
lhs += uint.sizeof;
rhs += uint.sizeof;
}
for(; n >= ubyte.sizeof; n -= ubyte.sizeof) { …Run Code Online (Sandbox Code Playgroud) 假设我有一个包含十几个不同模块的项目,它们生成一个结果DLL,我该如何分析它以便我可以识别每个模块/函数所贡献的实际文件大小?我知道在Release版本中可能无法删除大量信息,但是如果我拥有完整的源代码并且可以执行Debug构建怎么样?
另外,如果在某处定义了大的静态变量,有没有办法可以轻松找到它们?
奖金问题:Linux ELF文件怎么样?
如果使用位运算符(会发生什么事&,|等)来比较两个大小不同的位域?
例如,0 1 1 0与0 0 1 0 0 0 0 1:
0 1 1 0 0 0 0 0 The smaller one is extended with zeros and pushed to the
0 0 1 0 0 0 0 1 most-significant side.
Run Code Online (Sandbox Code Playgroud)
要么...
0 0 0 0 0 1 1 0 The smaller one is extended with zeros and pushed to the
0 0 1 0 0 0 0 1 least-significant side.
Run Code Online (Sandbox Code Playgroud)
要么... …
我最近开始进入低级别的东西,并研究引导加载程序和操作系统等...
据我了解,至少对于ARM处理器,外围设备由引导加载程序初始化,然后映射到物理内存空间.从这里开始,代码只需将值写入映射到外设寄存器的存储空间即可访问外设.稍后,如果芯片具有MMU,则可以将其用于进一步重新映射到虚拟存储器空间.我对吗?
我不明白的是(假设我上面说的是正确的):
我读了这篇关于C/C++的一些低级基础的文章,作者基本上是通过编译器生成的汇编代码逐行向我们展示的.他正在使用VS 2010,但我没有,我使用Code :: Blocks.如何在那里查看拆卸?当我进入调试器,然后单击反汇编时,它会显示一个空白窗口...
这是我编译的C++(.cpp)代码(整个代码):
int main()
{
int x = 1;
int y = 2;
int z = 0;
z = x + y;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在POSIX环境中使用系统调用来操作文本文件(open(), close(), read(), write())时,有没有办法检查我在使用时是否实际关闭了文件描述符close(file_descriptor)?
示例:
int main(int argc, char **argv)
{
int input_file; // file descriptor for input file
int output_file; // file descriptor for output file
input_file = open(argv[1], O_RDONLY));
ouput_file = open(argv[2], ...file properties & permissions and crap.....);
// blah blah blah...
close(input_file);
close(output_file);
// what can I code here to check if the file descriptor was actually closed?
}
Run Code Online (Sandbox Code Playgroud) 作为一个个人项目,我一直在为我自己的C语言编写一个编译器来定位我自己设计的CPU模拟器.
作为其中的一部分,我想实现一个标准浮点库(典型的IEEE单精度),但我一直在努力想出一种以易于阅读的方式打印浮点数的方法(如1.2345而不是原始数据整数),我能想到的最好的是生成log 10 2的值并进行一些奇数乘法以获得适合打印的数字.
是否存在将浮点数转换为易于打印的形式或打印浮点数的算法,该浮点数可以在不使用printf("%f",float_value);或类似C语言的类型转换的情况下实现?
我刚刚编写了一些使用Audio Units的iOS代码,以硬件采样率从麦克风获取单声道浮点流.
它最终成了很多代码!首先,我必须设置一个音频会话,指定所需的48kHz采样率.然后我必须启动会话并检查实际返回的采样率.这将是实际的硬件采样率.然后我必须设置一个音频单元,实现渲染回调.
但我至少能够使用硬件采样率(因此我可以确定通过软件重新采样没有信息丢失).而且我也能够设置尽可能小的缓冲区大小,以便实现最小的延迟.
android上的类似过程是什么?
我怎样才能接通电线?
PS目前还没有提到它,但似乎可以在JNI级别工作.
在我的键盘钩子中,每个按键都会获得一个标志,指示它是否被注入. http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspx
我从lParam中提取了一个KBDLLHOOKSTRUCT.我可以访问kbd.flags.XXX.我只是不知道如何将这个8位标志转换为if (injected) {...我知道如何使用的条件类型.
如果你们中的一个聪明的计算机科学类型会帮助我,我会非常感激.
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
KBDLLHOOKSTRUCT kbd = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, kbd);
//if (injected) {...
Run Code Online (Sandbox Code Playgroud)
干杯!
我正在学习汇编语言而且我遇到了FWORD(6个字节).我很好奇这是什么意思F?维基页面上没有任何内容,MSDN上也没有任何内容.
low-level ×10
c ×3
algorithm ×2
assembly ×2
c++ ×2
performance ×2
android ×1
arm ×1
audio ×1
bit-fields ×1
c# ×1
codeblocks ×1
cpu-word ×1
d ×1
decimal ×1
definition ×1
diagnostics ×1
dumpbin ×1
flags ×1
low-level-io ×1
memory ×1
microphone ×1
real-time ×1
windows ×1
x86 ×1