小编Ser*_*ins的帖子

如何知道ARM库是否正在使用hardfp?

我无法访问build命令,我只在系统中安装了库.

我想我可以构建一个连接它并测试的hardfp可执行文件,但我想知道是否有更简单的方法.

c++ gcc arm

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

创建没有标题栏的窗口,可调整边框,没有虚假的6px白色条纹

我想要一个没有标题栏但有可调整大小的框架和阴影的窗口.这可以通过删除WS_CAPTION和添加WS_THICKFRAME轻松实现,但是,从Windows 10开始,有一个6px的白色非客户区域.

使用以下代码我创建一个窗口并用黑色绘制所有客户区域,窗口获得左,右和底部6px透明边距,但是上边距是白色.

#ifndef UNICODE
#define UNICODE
#endif 

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
    // Register the window class.
    const wchar_t CLASS_NAME[]  = L"Sample Window Class";

    WNDCLASS wc = { };

    wc.lpfnWndProc   = WindowProc;
    wc.hInstance     = hInstance;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);

    // Create the window.

    HWND hwnd = CreateWindowEx(
        0,                              // Optional window styles.
        CLASS_NAME,                     // Window class
        L"",    // Window text
                0,
        // …
Run Code Online (Sandbox Code Playgroud)

winapi gdi paint windows-10

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

为什么gcc在按值传递普通结构时会发出不需要的内存访问?

众所周知,一些没有非平凡复制的小结构,没有非平凡的dtor在寄存器中传递.

引用ARM程序调用标准:

大于32位的基本类型可以作为参数传递给函数调用,或者作为函数调用的结果返回.当这些类型在核心寄存器中时,以下规则适用:双字大小类型在两个连续寄存器中传递(例如,r0和r1,或r2和r3).寄存器的内容就好像该值是通过单个LDM指令从存储器表示加载的.

事实上,我可以轻松地用铿锵声证实这一点.然而,gcc为这样一个简单的代码片段发出了大量的内存加载和存储:

struct Trivial {
    int i1;
    int i2;
};

int foo(Trivial t)
{
    return t.i1 + t.i2;
}
Run Code Online (Sandbox Code Playgroud)
$ clang++ arm.cpp -O2 -mabi=aapcs -c -S && cat arm.s

add r0, r0, r1
bx  lr
Run Code Online (Sandbox Code Playgroud)
$ g++ arm.cpp -O2 -mabi=aapcs -c -S && cat arm.s

sub     sp, sp, #8
add     r3, sp, #8
stmdb   r3, {r0, r1}
ldmia   sp, {r0, r3}
add     r0, r0, r3
add     sp, sp, #8
bx      lr
Run Code Online (Sandbox Code Playgroud)

我正在使用由ArchlinuxARM发行版提供的gcc和clang,在raspberry pi 2(gcc 5.2)上运行,但我也用基于gcc的交叉编译器再现它.

c++ assembly arm calling-convention

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

gnueabi和eabi有什么区别?

我见过arm-linux-gnueabi-和arm-linux-eabi- triplets.从小的我可以发现,似乎gnueabi是eabi的"sub-abi".我想知道究竟是什么区别.

我正在努力为QNX目标编译,所以我想知道使用哪个abi,我尝试了gnueabi,它对一个小程序工作得很好.

在检查了clang的源之后,我发现两者之间没有太大区别,除了"eabi"std :: size_t在Darwin上是无符号长,而"gnueabi"总是使用unsigned int,独立于OS.

gcc arm clang eabi

5
推荐指数
0
解决办法
1482
查看次数

获取模板中的外部类的类型

struct Outer {
    struct Inner {
    };
};

template <typename T>
void test()
{
    ??Outer?? foo; // How do I get the type of T's outer class ?
}

test<Outer::Inner>();
Run Code Online (Sandbox Code Playgroud)

在test()里面我有一个类型为T的模板参数,我想要声明一个任何类型的变量是T的外部类.

我认为编译器获取该信息应该是微不足道的,但到目前为止还找不到如何做到这一点.

c++ templates

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

标签 统计

arm ×3

c++ ×3

gcc ×2

assembly ×1

calling-convention ×1

clang ×1

eabi ×1

gdi ×1

paint ×1

templates ×1

winapi ×1

windows-10 ×1