小编Nik*_*kos的帖子

std :: invoke和std :: apply有什么区别?

它们都被用作调用函数,成员函数和通常可调用的任何东西的通用方法.从cppreference我看到的唯一真正的区别是std::invoke函数参数(不管它们是多少)被forward编写到函数中,而std::apply参数作为a传递tuple.这真的是唯一的区别吗?他们为什么要创建一个单独的函数来处理tuples?

c++ function-pointers callable c++17

10
推荐指数
2
解决办法
1508
查看次数

在模板参数中使用时,{}在type_trait <T> {}中的作用是什么?

我经常{}在模板化的代码中看到这种情况.我不确定我明白它在做什么.例如:

std::enable_if_t<std::is_copy_constructible<T&>{} && !std::is_same<T, MyClass>{}>>
Run Code Online (Sandbox Code Playgroud)

这是什么{}?它是否实例化了这种类型?这意味着什么作为模板参数?

实例化类型的AFAIK意味着创建一个对象.如何在此上下文中创建对象?它只是创建一个虚拟对象?为什么这样?这是什么意思和目的?

c++ templates types type-traits template-meta-programming

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

可执行部分标题 - 含义和用途?

通过使用 7zip 在 Windows 中打开许多可执行 ( .exe., .msi) 文件,我注意到许多不同的常见文件类型。这些包括 .text、.data、.bss、.rdata、.pdata 等。我试图获取有关它们的信息,但我无法找出它们的全部含义。以下是其中一些:

  • .text :代码部分,包含程序的指令-只读-。
  • .data: 一般用于一些初始化的非零内容的可写数据。因此,数据部分包含可以在应用程序执行期间更改的信息,并且必须为每个实例复制该部分。
  • .bss : 用于初始化为零的可写静态数据。
  • .rdata : 任何类型的常量/只读数据都存储在这里。
  • .edata : 导出目录、描述符和句柄
  • .idata:句柄和描述符的导入目录。可执行文件(exe、dll 等)使用它来指定导入和导出的函数。
  • .rsrc :包含可执行文件所需的各种其他资源的信息的部分,例如在资源管理器中查看可执行文件时显示的图标

还有很多其他的,这是常见的,我找不到任何信息。主要是:.pdata, .tls, .reloc, 证书, .rsrc_1, .aspack, .adata, .INIT, DATA, CODE, .ctors

rsrc其中大多数都包含一个文件夹,其中包含 BITMAP、CURSOR、ICON、GROUP_CURSOR、GROUP_ICON、MENU、VERSION 等文件夹。

一些可执行文件还包含更多的可执行文件、.html文件、.txt文件等。我还打开了一个根本不包含任何内容的可执行文件(至少用 7zip 打开它没有显示任何内容)![我用7zip打开了它们。]


问题

  1. 我发布的那些部分/段有什么作用?有没有可以全部找到的网站?
  2. 我看到的所有这些都是适用于 Windows 的 PE。这些格式是否标准并以类似/相同的方式适用于 LINUX、UNIX 等?
  3. 为什么有些可执行文件里面包含其他可执行文件,或者.html、.txt等文件?当您启动可执行文件时,这些是如何处理的?他们应该怎么做?AFAIK 可执行文件中的所有内容都应该只有那些类似于汇编代码部分的“段”。
  4. rsrc文件夹有什么用?它拥有什么样的资源?

我将不胜感激,如果您能发布更多关于为什么使用所有这些(尽可能低级别)的信息/链接,以及通常可执行结构应该是什么样子,它应该包含什么等。

这就是全部。


编辑 …

assembly executable exe portable-executable

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

如何将 Windows 中的简单程序与 Mingw GCC 链接

我有一个简单的“Hello World!” 我的桌面上有一个名为 hello.c 的 c 程序:

#include <stdio.h>

int main() {
    printf("Hello world!\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我运行以下命令。

  • 我用以下命令对其进行预处理:cpp hello.c > hello.i
  • 我用以下命令编译它:gcc -S hello.i
  • 我用以下命令组装它:as -o hello.o hello.s

到目前为止一切都很好。但是,我无法链接它。除其他命令外,我还尝试过以下命令:

ld -o hello.exe hello.o
ld -o hello.exe hello.o -lgcc
ld -o hello.exe hello.o -nostdlib -lgcc
Run Code Online (Sandbox Code Playgroud)

什么都不起作用。我在每种情况下遇到的链接错误是:

hello.o:hello.c:(.text+0x9): undefined reference to `__main'
hello.o:hello.c:(.text+0x15): undefined reference to `puts'
Run Code Online (Sandbox Code Playgroud)

我如何链接这个汇编程序hello.o以便最终生成可执行程序hello.exe?我缺少什么?[使用 Windows 8.1,Mingw 版本 0.6.2。] 提前致谢。

c windows linker gcc mingw

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

struct S {int align; }; (struct关键字后面的名称)和struct {int align; S; (结构定义后的名称)

#include <stdio.h>

struct Header
{
    unsigned long long int alignment;
};

int main(void)
{
    struct Header header;  // note: we can loose the 'struct' in C++
    struct Header* pheader = &header;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序在C和C++中完美编译.

但是当我将Header结构更改为:

struct {
    unsigned long long int alignment;
} Header;
Run Code Online (Sandbox Code Playgroud)

它失败并在C中显示以下消息: error: storage size of ‘Header’ isn’t known

在C++中: error: aggregate ‘main()::Header header’ has incomplete type and cannot be defined struct Header header;

在K&R的C编程语言书中,存储分配器的实现中使用了类似的结构.我认为这是一回事,但我知道事实并非如此.我也曾在其他地方见过.我当然更熟悉第一个版本.第二个是什么意思,为什么它甚至存在?有什么不同?

c c++ struct kernighan-and-ritchie

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

How to output and input UTF8 or UTF16 Unicode text in Windows using C++?

This is my program:

#include <iostream>
#include <string>
#include <locale>
#include <clocale>
#include <codecvt>
#include <io.h>
#include <fcntl.h>

int main()
{
    fflush(stdout);
    _setmode(_fileno(stdout), _O_U16TEXT);
    std::ios_base::sync_with_stdio(false);
    std::setlocale(LC_ALL, "el_GR.utf8");
    std::locale loc{ "el_GR.utf8" };
    std::locale::global(loc);       // apparently this does not set the global locale
    //std::wcout.imbue(loc);
    //std::wcin.imbue(loc);

    std::wstring yes;
    std::wcout << L"It's all good ???? ???" << L'\n';
    std::wcin >> yes;
    std::wcout << yes << L'\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Lets say I want to support greek encodings (for both input and output). This program …

c++ windows winapi locale facet

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

如何在`C++17`中调用重载对齐的new和delete运算符?

cppreference我们可以看到几个新的过载newdelete,以及new[]delete[]添加。我在 cppreference 或其他任何地方都找不到任何使用新对齐重载的示例。我已经对它们进行了一段时间的试验,但我不知道如何触发这些对齐的动态分配的调用。任何人都有任何想法,请分享一个例子。

c++ overloading alignment new-operator delete-operator

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

被调用对象不是函数或函数指针

我有以下代码.

typedef pid_t (*getpidType)(void);

pid_t getpid(void)
{
    printf("Hello, getpid!\n");
    getpidType* f = (getpidType*)dlsym(RTLD_NEXT, "getpid");
    return f(); // <-- Problem here
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说called object ‘f’ is not a function.这里发生了什么?我没有以正确的方式声明和使用函数指针f吗?

c linux gcc glibc x86-64

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

PE 中的“隔离图像”属性是什么?

如果我查看可移植可执行文件的内部结构,该IMAGE_OPTIONAL_HEADER部分内有一个IMAGE_DLLCHARACTERISTICS_NO_ISOLATION字段,正如微软在这里提到的那样,这意味着:“图像是隔离感知的,但不应该被隔离。”。但是,我不明白这里的含义或隐含的含义,也无法找到更多相关信息。此选项也作为 Visual Studio 选项存在,并且在创建 Win32 应用程序项目时默认启用 (VS 2015 C++)。在启用它之前,我想知道它对代码生成有何作用。

如果有人知道,请分享。提前致谢。

c++ windows portable-executable visual-studio

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

哈希表混淆 - 具有良好(例如加密)哈希函数的哈希表需要多少空间?

我正在学习有关哈希表,哈希地图等我刚刚实施了哈希表在C,与操作:insert(HTable, key)delete(HTable, key)initialize(HTable)search(HTable, key)

我想问一件事。由于在(适当的)哈希表中,计算出的哈希索引可能非常大,这是否意味着消耗的空间会像INT_MAX(当然仍然是 O(n))或更多?我的意思是给定我们想要存储在哈希表中的输入元素(即插入它),insert() 函数将调用哈希函数,然后该函数将计算要进入的元素的哈希索引。因此它将使用哈希函数来找到这个索引。

当我们使用哈希函数对元素进行操作时,哈希索引可能会变得非常大。使用适当的,例如加密哈希函数,这个索引可能会变得很大(他们使用 300 位的素数 - Diffie Hellman 公钥密码学等),对吧?我知道在普通的散列函数(例如初学者用来学习的琐碎函数)中,我们应用 mod 操作以使元素适合散列表的边界,但这样做,也许我们限制了散列函数的潜力?

因此,要将元素唯一地映射到哈希表,我们必须使用一个巨大的哈希表。这些加密哈希表是如何实现的?它们必须是完全安全的,对吧?甚至“cryptographichashfunction”上的 Stack Overflow 标签也表示,极不可能找到将映射到同一元素的两个输入(因此冲突的可能性很小)。这不需要将一个巨大的数组存储在内存(或磁盘)中吗?因此,内存消耗将是巨大的。

当然,时间复杂度不是问题。我们只是看到哈希表/数组的起始地址加上索引,然后去内存中的那个地方获取值(O(1) - 哈希表的搜索原理)。

我在某处错了吗?有什么我想念的吗?我希望我说清楚了。总而言之,我想对此进行确认。一个好的散列函数是否需要一个巨大的数组(散列表)以及如此大量的内存才能正确实现?这么多空间是合理的,还是有什么我不太明白的地方?谢谢。

hash cryptography hash-function hashtable cryptographic-hash-function

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