小编Aco*_*orn的帖子

magento 中的块类型 core/text_list 是什么?

core/text_list下面是什么以及它是如何工作的?我正在检查core文件夹,但找不到有关text_list工作原理的说明。

app/design/frontend/base/default/template/core 

<block type="core/text_list" name="before_body_end" as="before_body_end" translate="label">
            <label>Page Bottom</label>
            <block type="page/html_cookieNotice" name="global_cookie_notice" as ="global_cookie_notice" template="page/html/cookienotice.phtml" before="-" />
        </block>
Run Code Online (Sandbox Code Playgroud)

magento-1.9

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

如何在32位地址空间内分配缓冲区?

我想在 64 位 ARM 上的 32 位地址空间内分配一个缓冲区。换句话说,我想确保我的缓冲区绑定到较低的 32 位地址空间。你知道有一个很好的 C 函数可以做到这一点吗?

c linux arm memory-address 32bit-64bit

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

如何在 Ubuntu 上导入使用 pybind11 创建的模块

我正在尝试设置一个 CMake 项目,在 Ubuntu 上使用 pybind11 为其 C++ 函数创建 python 绑定。

目录结构为:

pybind_test
    arithmetic.cpp
    arithmetic.h
    bindings.h
    CMakeLists.txt
    main.cpp
    pybind11 (github repo clone)
        Repo contents (https://github.com/pybind/pybind11)
Run Code Online (Sandbox Code Playgroud)

文件CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(pybind_test)

set(CMAKE_CXX_STANDARD 17)

find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
include_directories(pybind11/include/pybind11)

add_executable(pybind_test main.cpp arithmetic.cpp)

add_subdirectory(pybind11)
pybind11_add_module(arithmetic arithmetic.cpp)

target_link_libraries(pybind_test ${PYTHON_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

arithmetic.cpython-36m-x86_64-linux-gnu.so存储库已成功构建并生成文件。如何将此共享对象文件导入到 python 中?

pybind11 文档中的文档有这一行

$ c++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix`
Run Code Online (Sandbox Code Playgroud)

但我想使用 CMake 进行构建,并且我也不想每次运行 python 来使用此模块时都必须指定额外的包含目录。

我如何像普通的 python 模块一样将此共享对象文件导入到 python 中?

我使用的是 Ubuntu 16.04。

c++ python linux cmake pybind11

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

在 C++ 中是否有来自 C# 的关键字“where”的类似物?

我需要在 C++ 中创建一个模板类。我需要确保模板参数的类型将是一个具有 1 个 int 字段和 1 个 string 字段的类(可以有更多字段,但这些是强制性的)。

例如,在 C# 中,我可以定义一个带有方法或属性的接口,如下所示:

interface MyInterface {
    int GetSomeInteger();
    string GetSomeString();
}
Run Code Online (Sandbox Code Playgroud)

然后我可以在我的模板类中使用它:

class MyClass<T> where T: MyInterface {}
Run Code Online (Sandbox Code Playgroud)

有没有办法在 C++ 中做这样的事情?

c++ templates c++-concepts

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

如何指示 MS Visual C++ 编译器使用未初始化的 __m512i 寄存器

如何指示 Visual C++ 编译器 (1926) 使用未初始化的__m512i寄存器。在下面的代码片段not(or(A,B))中计算了a ,内容dummy无关紧要。

__m512i dummy;
const __m512i n8 = _mm512_ternarylogic_epi64(dummy, A, B, 0x11);
Run Code Online (Sandbox Code Playgroud)

不知何故,编译器假定寄存器需要有一些内容,(它没有),并为以下生成昂贵且不必要的内存引用zmm0

62 F1 7E 48 6F 45 00 vmovdqu32   zmm0,zmmword ptr [rbp]  
62 F3 DD 48 25 C5 11 vpternlogq  zmm0,zmm4,zmm5,11h  
Run Code Online (Sandbox Code Playgroud)

ICC 19.0.1 了解这种情况并且不会生成vmovdqu32.

我试过什么:dummy用 0初始化替换为vmovdqu32

C5 F1 EF C9          vpxor       xmm1,xmm1,xmm1
Run Code Online (Sandbox Code Playgroud)

这仍然给出了不必要的指令和停顿。

因此问题是:如何指示 Visual C++ 编译器执行与 Intel 编译器相同的操作?只是不要初始化虚拟寄存器。

c++ intrinsics micro-optimization visual-c++ avx512

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

从 dlopen 加载的函数可以调用加载它的可执行文件中的函数吗?

设置

假设我用 C/C++ 编写了一个程序并希望允许加载插件。典型的解决方案是将插件编写为:

插件.c

int my_plugin_fn() {
    return 7;
}
Run Code Online (Sandbox Code Playgroud)

并使用类似的东西编译它gcc -fpic -shared -o plugin.so plugin.c

然后,在加载这个插件的主程序中,我们可能有:

加载器.c

#include <stdio.h>
#include <dlfcn.h>

int main() {
    void *plugin_handle = dlopen("./plugin.so", RTLD_LAZY);
    if (!plugin_handle) {
        printf("Could not open shared object: %s\n", dlerror());
        return -1;
    }

    int (*fn)() = dlsym(plugin_handle, "my_plugin_fn");
    char *err = dlerror();
    if (err) {
        printf("Could not resolve symbol: %s\n", err);
        return -1;
    }

    printf("Plugin object returned: %d\n", fn());

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

我用 编译了 loader.c gcc -o loader …

c c++ dlopen

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

是否可以通过命名参数来调用 Rust 中的函数?

我不知道这是否被认为是一种好的编程习惯,但就我个人而言,我发现通过命名函数的参数来调用函数会使代码更具可读性。我不知道这在 Rust 编程语言中是否可行。我在语法中没有找到任何命名的调用表达式:

https://doc.rust-lang.org/reference/expressions/call-expr.html

因此,例如以下不能编译:

fn add(n1 : i32, n2 : i32) -> i32 {
    n1 + n2
}


fn main() {
    let sum_value = add(n1 = 124, n2 = 200);
    println!("sum = {}", sum_value);
}
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是:在 Rust 中是否可以在函数调用中命名参数,如果答案是肯定的,根据 Rust 最佳实践,它是否被认为是一种好的做法?(我是初学者)

环境:

OS: Linux Ubuntu MATE 20.04.1 (64 bits)
rustc --version: rustc 1.46.0 (04488afe3 2020-08-24)
Run Code Online (Sandbox Code Playgroud)

rust

4
推荐指数
3
解决办法
760
查看次数

为什么不同TU中的“静态”功能不会破坏ODR?

ODR允许我们多次定义相同的内联函数(有一些限制)。

但是,简单的static函数情况又如何呢?

// First TU
static int foo() { return 0; }
int bar1() { return foo(); }

// Second TU
static int foo() { return 1; }
int bar2() { return foo(); }
Run Code Online (Sandbox Code Playgroud)

如果我们快速阅读[basic.def.odr] p4,我们可以天真的得出结论,那就是UB:

每个程序应准确地包含在该程序中被丢弃的语句之外的每个非内联函数或变量的一个定义(9.4.1);无需诊断。

在C ++标准中哪里指定了每个foo函数都是不同的函数,因此即使它们具有相同的名称,也不会破坏ODR?

仅仅是阅读[basic.link] p2.2的问题(即,由于内部链接,名称不指向同一实体,因此[basic.def.odr] p4在这里不适用)?还是做出决定时涉及更多细微差别/规则(例如[basic.scope]中的内容)?

请注意,使用未命名的名称空间,结果很明显,因为名称已经是不同的/唯一的。

c++ static one-definition-rule linkage language-lawyer

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

将二进制结构写入文件,意外结果?

我正在尝试将打包的数据结构写出到二进制文件中,但是正如您从od -x下面看到的那样,结果的顺序并不符合预期。我在 64 位 Intel 系统上使用 gcc。有谁知道为什么顺序是错误的?它看起来不像字节序问题。

#include <stdio.h>
#include <stdlib.h>

struct B {
     char a;
     int b;
     char c;
     short d;
} __attribute__ ((packed));

int main(int argc, char *argv[])
{
     FILE *fp;
     fp = fopen("temp.bin", "w");

     struct B b = {'a', 0xA5A5, 'b', 0xFF};

     if (fwrite(&b, sizeof(b), 1, fp) != 1)
          printf("Error fwrite\n");

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

ASCII 61 是'a',所以b.a成员。ASCII 62 是'b',所以b.c成员。奇怪的0xA5A5是如何在序列中展开。

$ od -x temp.bin 
0000000 a561 00a5 …
Run Code Online (Sandbox Code Playgroud)

c

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

在一条指令中使用与操作数相同的寄存器是否合法?

例如,下面是一条 X86-64 指令:

movq (%rdi),%rdi
Run Code Online (Sandbox Code Playgroud)

它读取内容(由 指向%rdi)并将此内容设置为%rdi,这在时序逻辑中是否有效?

或者我们是否必须将其分配给不同的寄存器并将其移回:

movq (%rdi), %rsi
movq rsi, %rdi
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 instruction-set instructions

3
推荐指数
2
解决办法
109
查看次数