小编fuz*_*fuz的帖子

C++:在char*中将大型二进制文件(2GB到4GB)保存到RAM中?

我正在使用C++ 文件传输程序,它将文件转换为二进制文件,将字节保存在char*中,然后通过TCP连接将该char*发送到另一台计算机.然后另一台计算机在本地重新创建该文件.该程序确实有效,但我遇到了大文件的大问题!我无法分配足够的数组索引来包含字节!例如,如果我想发送一个600MB的文件,我需要一个带有600万个索引的char*.这有效.但是一旦我走得更高,程序根本无法分配内存而我会收到错误.

我的一个朋友建议我将文件分成块并按块执行传输块,但这会产生大量其他挑战,并且需要我基本上重写整个程序.

有没有办法解决这个问题?

c++ ftp file-io tcp

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

在编译阶段,c ++如何处理未知大小的数组分配

我已经了解到c ++在编译阶段使用相对距离以提高代码的性能.例如,它知道两个局部整数的距离是4.我的问题是关于编译期间大小未知的数组

例如,编译器没有在下面的代码中为本地数组分配的内存量信息:它如何知道局部变量local2和size之间的相对距离

#include <iostream>
using namespace std;

int main() {
    int size = std::getchar();
    int arr[size];
    int local2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays

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

编译器会忽略我的函数的内联限定符吗?

我读到在函数中有多于一行会伪造“内联”,如果是这样,我如何知道我的函数何时被内联,反之亦然:/

inline int foo(int x, int y)
{
   cout<<"foo-boo";
   return (x > y)? x : y;
}
Run Code Online (Sandbox Code Playgroud)

c++ inline

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

动态加载和卸载 c# 程序集到 appdomain

有很多类似的问题。但他们都岁了,今天不工作(不再?)。

所以这是我的问题:我想将 ac# 程序集加载到内存中,并找出它是否包含与我想使用的接口匹配的类型。如果程序集包含此类类型,我会在主应用程序中引用并使用它。如果没有,我想卸载 dll,然后能够删除文件(从我的主应用程序或在应用程序运行时手动删除)。

我的第一个实现只是省略了 appdomain 方法,但它有效(不删除或替换程序集文件)。然后我尝试按照各种示例中的描述加载程序集。但是没有我能够从磁盘中删除不需要的程序集文件。

当程序集在应用程序中被引用时,根本无法卸载和删除它们,或者我做错了什么。这是我最后尝试的:

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Windows.Forms;
using ESTLogViewer_V2.Formulare;
using Parent;
namespace ESTLogViewer_V2
{
    static class Program
    {
        //<summary>
        //Der Haupteinstiegspunkt für die Anwendung.
        //</summary>
        [STAThread]
        static void Main()
        {
            LoadTest.Haupt(null);
        }
    }
}
namespace Parent
{
    public class Constants
    {
        // adjust
        public const string LIB_PATH = @"e:\PRJDOTNET4\ESTLogViewer V2\Plugins\LogFiles_Plugin.dll";
    }

    public interface ILoader
    {
        string Execute();
    }

    public class Loader : MarshalByRefObject, ILoader
    {
        public …
Run Code Online (Sandbox Code Playgroud)

.net c# .net-assembly

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

C程序如何在引擎盖下传递参数?

这是PDP-11代码混合C和汇编.在下面,u.u_rsav是一个数组指针,

savu(u.u_rsav);

该函数的汇编代码是

_savu:        bis     $340,PS
              mov     (sp)+,r1
              mov     (sp),r0
              mov     sp,(r0)+
              mov     r5,(r0)+
              bic     $340,PS
              jmp     (r1)
Run Code Online (Sandbox Code Playgroud)

看起来在进入程序之前,它首先推送参数,然后推送返回点PC值.因此,r1存储PC,r0存储参数.我的谜题是sp(堆栈指针)在汇编代码跳回调用点之前不会恢复到原始值.它仍然指向参数存储在堆栈中的位置.

c assembly stack compilation pdp-11

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

ARM 汇编中的点(两个关键字之间)意味着什么?

我看到了这样的集会:

b.gt memzero
Run Code Online (Sandbox Code Playgroud)

我想我知道 的含义b.gt,但不确定为什么语法是合法的。通过开发人员指南,我还没有看到任何这样的语法。

有没有规范这种语法的文档?或者我该如何称呼它?

assembly arm64

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

系统调用是应用程序/用户程序请求操作系统服务来执行特权操作的唯一方式吗?

尽管我知道这个主题的范围要广泛得多,但我处于 Linux 环境中

假设我正在编写一个简单的 C 程序,并且想向终端写入“Hello”。显而易见的方法是使用 C 标准库 printf,它又使用 write 系统调用(包装函数而不是系统调用本身),而 write 系统调用又调用实际的汇编系统调用指令(或 int)。不太明显的方法是在我的 C 源文件中使用一些内联汇编,或者直接创建一个包含系统调用指令的汇编文件。

我的问题

  1. 似乎在一天结束时,我们以某种方式结束了系统调用(指令 syscall 或 int)。这是唯一的方法吗?

  2. 在现代 PC 中,术语“应用程序”与“用户程序”的含义相同吗?

  3. 我编写的 PowerPoint、Google Chrome、Visual Studio Code、Photoshop 或 C 程序都是需要系统调用来请求操作系统服务以执行写入文件等特权操作的应用程序/用户程序的示例,这样说是否正确?

linux assembly system-calls usermode kernel-mode

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

为什么GHC抱怨错误的类型?

这个小函数检查(有限的)Brainfuck字符串的有效性.它检查的是否[]平衡.代码非常简单,并且编写为尾递归:

-- checks Brainfuck for validity.
validateBrainfuck :: Monad m => String -> m String
validateBrainfuck s = maybe (return s) (fail . fromJust) (validate s 0) where
  validate :: String -> Int -> Maybe String -- Here inversed: String means error
  validate (']':_ ) 0 = Just "Too many closing brackets"
  validate (']':xs) c = validate xs (pred c)
  validate ('[':xs) c = validate xs (succ c)
  validate ( x :xs) c = validate xs …
Run Code Online (Sandbox Code Playgroud)

haskell types compiler-errors brainfuck

0
推荐指数
1
解决办法
164
查看次数

未初始化的结构成员:最佳实践

在我的代码中,我有一个像这样的结构:

struct fileinfo {
    /* ... */
    bool hashed;
    char hash[20];
}
Run Code Online (Sandbox Code Playgroud)

处理a的每个函数struct fileinfo只读取hashif 的值,仅当if hashed被设置时.我的程序将其中的几个写入struct fileinfo临时文件中以供以后使用:

struct fileinfo info;

/* ... */

info.hashed = false;

/* ... */

if (fwrite(&info,sizeof info,1,m->info_file) != 1) {
     perror("Error writing to temporary file");
     return 1;
}
Run Code Online (Sandbox Code Playgroud)

Valgrind现在抱怨我将未初始化的内存传递给系统调用write.处理此类案件的最佳做法是什么?将事件简单地memset成为hash零字节是最好的想法吗?

c initialization

0
推荐指数
2
解决办法
1786
查看次数

处理器如何处理未初始化的变量?

所以我有一个分配,我基本上必须在汇编中弄清楚变量是如何存储的,而且我在弄清楚 C++ 如何处理各种变量时遇到了问题。

MyClass var;
MyClass *p = new MyClass();
var.setX(3)
Run Code Online (Sandbox Code Playgroud)

我想我发现的是: *p 引用被存储在堆栈上,而创建的对象被分配在堆上。这意味着 p 正在引用创建的对象。请确认是否正确。

问题是var会发生什么,它是动态分配的吗?我正在查看程序集,但找不到任何可以指向我答案的内容。

c++ assembly

0
推荐指数
1
解决办法
105
查看次数