标签: low-level

什么是INT 21h?

灵感来自这个问题

如何强制GDB反汇编?

我想知道INT 21h是一个概念.现在,我对内部有一些非常生疏的知识,但没有那么多细节.我记得在C64中你有定期中断和不可屏蔽中断,但我的知识在这里停止.你能告诉我一些线索吗?这是DOS相关策略吗?

operating-system interrupt internals low-level

5
推荐指数
3
解决办法
3万
查看次数

需要有关高级低级编程的书籍和网站建议

我想学习低级编程的所有高级细节,所以我希望能够

  • 学习高级c/c ++
  • 使用和不使用内联汇编优化我的代码
  • 理解exe,dll,线程,进程的内部
  • 有效利用SSE,3DNow,MMX等技术
  • 调试和反汇编可执行文件/库,并了解内部发生的事情
  • 不同cpus /平台的差异/功能,如x86,MIPS,ARM,PowerPC
  • 我的第一个目标是基于x86 Windows的系统.之后,基于Linux的平台.嵌入式系统如下.任何书籍,网站,教程,论坛,社区,直接给我我正在寻找的东西是好的.
    谢谢..

    c++ optimization internals low-level

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

    估计处理器频率如何影响I/O性能

    我正在研究可以在消费者硬件上运行的专用I/O软件.从本质上讲,它归结为保存大量数据流以供以后处理.现在我正在寻找一个模型来估计x86上的性能因素.

    以新款Macbook Pro为例:

    高速Thunderbolt I/O(输入/输出)技术可在两个方向上提供惊人的每秒10千兆位的传输速度

    1.25 GB/s听起来不错,但当天的大多数处理器都是时钟2 Ghz.只要每个网络通道只能分配一个核心,多个核心就没什么区别.

    因此,即使软件充当微型操作系统并且仅限于网络/磁盘操作,流入存储的数据量也不能超过每秒[1]块.虽然这暗示了粗略的性能限制,但我觉得它远远不够.P / (2 * N)

    在处理器频率和其他硬件细节方面,应该考虑哪些其他因素来估算I/O性能?为简单起见,假设存储在所有情况下都能立即执行.

    [1] P - 处理器频率; N - 算法开销

    language-agnostic io performance network-programming low-level

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

    解码git对象/"块长度与其补码不匹配"错误

    我遇到了非常简单但烦人的问题,并且无法在互联网上找到答案.希望你能指出我,我做错了什么.

    我正在尝试从Git存储库中解码对象.根据ProGit,文件名及其内容在提交期间已被缩小.

    我正在使用C#将SHA1指示的对象读入流中,对其进行充气并转换为字节数组.这是代码:

    using System.IO.Compression;
    
    static internal byte[] GetObjectBySha(string storagePath, string sha)
    {
        string filePath = Path.Combine(storagePath, "objects", sha.Substring(0, 2), sha.Substring(2, 38));
        byte[] fileContent = null;
    
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            using (MemoryStream ms = new MemoryStream())
            {
                using (DeflateStream gs = new DeflateStream(fs, CompressionMode.Decompress))
                {
                    gs.CopyTo(ms);
                }
    
                fileContent = ms.ToArray();
            }
        }
    
        return fileContent;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    gs.CopyTo(ms);达到出现运行时错误:块长度不匹配它的补充.

    为什么这样?

    关于我正在尝试阅读的文件的内容......它是二进制的,它是由git可执行文件创建的.原始文件名是testfile.txt,它的内容是Sample text.SHA1 51d0be227ecdc0039698122a1513421ce35c1dbe.

    任何想法将不胜感激!

    c# git dvcs low-level

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

    多核/ NUMA上的CPUID

    我正在为我的爱好操作系统研究CPU检测和一般环境检测代码.有没有需要多次调用CPUID的情况?也就是说,如果系统有多个内核,操作系统是否需要在每个内核上调用CPUID?NUMA也是如此.

    无论是AMD英特尔 CPUID手册都对这个不清楚.在osdev wiki上有一篇文章提到调用CPUID称为检测CPU拓扑,但是我的阅读并不清楚CPUID需要调用的时间和次数.

    x86 osdev low-level cpuid

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

    ActionScript 3中循环的变量声明性能

    尽管有关于这个问题的所有已知博客我总是怀疑一些结果,我的个人测试表明,良好的标准并不是最好的.

    在循环内声明变量,使它们接近其范围,并使方法更快到达,但分配更多内存或在for scope范围外声明以节省内存分配,但增加处理以在远程实例中迭代.

    我的结果显示方法B更快(有时),我想知道这个背景.

    结果各不相同,我不是一个有点brusher的大师.

    那你们怎么想呢?

    方法A.

    var object:Object = new Object();
    var loop:int = 100000
    for (var i:int = 0; i < loop; i++)
    {
        object = new Object();
        object.foo = foo;
        object.bar = bar;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    方法B.

    var loop:int = 100000
    for (var i:int = 0; i < loop; i++)
    {
        var object:Object = new Object()
        object.foo = foo;
        object.bar = bar;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    performance actionscript-3 low-level

    5
    推荐指数
    2
    解决办法
    1112
    查看次数

    删除my_object时会发生什么?执行?是否所有其他内存都被sizeof(MyClass)向左移动了?

    为了这个问题,我将内存描述为一个简单的字节数组,我将讨论堆内存,因为它可以动态分配它.

    让我们说我正在实例化一些类,并在堆上创建一个已经分配了一些内存的对象.然后,在创建对象之后,我分配了更多的内存(可能通过实例化另一个类).当然,这意味着使用newdelete关键字.

    内存现在看起来像这样:

    ... byte byte my_object ... my_object byte byte ...

    delete my_object;执行时到底发生了什么?是否所有其他记忆都向左移动sizeof(MyClass)?如果是这样,由谁?操作系统?那么当没有操作系统提供虚拟内存时会发生什么?

    c c++ memory low-level

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

    IEEE754中是否存在关于加法的中性元素

    请考虑以下代码段

    double id = ?;
    double res;
    long unsigned *res_u = (long unsigned*)&res;
    
    long unsigned i;
    for (i = 0; i < (long unsigned)-1; i++){
        double *d1 = (double*)&i;
        res = id + *d1;
        assert(*res_u == i);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我的问题:是否有价值id,所以断言适用于所有人i?换句话说,对于我们中间的数学家来说,是否有两倍是加法的中性元素?

    c floating-point double low-level ieee-754

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

    如何获得固定的缓冲区长度?

    有没有办法获得固定大小的缓冲区的长度?

    就像是:

    public struct MyStruct
    {
        public unsafe fixed byte buffer[100];
    
        public int foo()
        {
            return sizeof(buffer); // Compile error.
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    有没有办法完成这样的事情?

    c# pointers unsafe low-level

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

    为什么stackalloc接受可变长度?

    知道为什么'stackalloc'关键字接受可变长度?

    如果该指令返回指向堆栈帧中分配的缓冲区的指针,编译器如何管理它?每次调用它来组织堆栈帧时,它都会在运行时重新编译该函数?

    谢谢.

    c# pointers low-level stackalloc

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