小编Pav*_*l P的帖子

GIT:更新到特定版本

我在8个月前检查了一个项目副本,在那里做了很多改动.现在,我想采取过去8个月的所有新变化.变化的数量是压倒性的(成千上万的提交).我想做的是一次更改1个月,与我的版本合并,测试.如果我拉最新的变化/冲突的数量是压倒性的.

所以......我想我很清楚我正在尝试做什么,但我不知道如何用GIT做这件事(我对svn比较熟悉).我在Windows上使用TortoiseGit.我在本地分支机构所做的所有本地更改,我需要做些什么才能完成自签出后所做的更改,但不是全部更改?

谢谢

git

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

MASM 中 x64 和 x86 模式的区别

我有可以使用 masm(ml.exe 或 ml64.exe)为 x64 和 x86 组装的 asm 文件。masm 中是否有一些预定义的宏来检测正在为 x64 组装的文件?现在我手动定义了 _WIN64 然后对其进行测试,但必须有更好的方法来检查它。

64-bit x86 masm

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

使用WRL声明中的C++/CX进行的等效类声明

我有这个WRL声明(取自MS提供的样本的灰度滤波器):

class CGrayscale: public RuntimeClass<
                             RuntimeClassFlags<WinRtClassicComMix>,
                             IMediaExtension,
                             IMFTransform
                          >
Run Code Online (Sandbox Code Playgroud)

如何将该类转换为C++/CX?我需要这样做的原因是因为在同一个DLL中我有使用C++/CX定义的类,它们会自动为这些类生成类工厂(从我的dll导出DllGetActivationFactory).自动C++/CX类工厂声明与我必须为WRL定义的运行时类所做的类工厂声明冲突.

因此,它似乎将WRL声明转换为C++/CX的最简单方法.如果使用C++/CX无法定义该类,我可以做些什么来使WRL和C++/CX定义的运行时类在同一个dll中共存(例如可被发现)?

windows-runtime

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

有效地计算 arm neon 中 8 个元素的数组的最大值

如何在 8 个字节、8 个短裤或 8 个整数的数组中找到最大元素?我可能只需要 max 元素的位置、max 元素的值,或者两者都需要。

例如

unsigned FindMax8(const uint32_t src[8]) // returns position of max element
{
    unsigned ret = 0;
    for (unsigned i=0; i<8; ++i)
    {
        if (src[i] > src[ret])
            ret = i;
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

-O2clang 展开循环但它不使用霓虹灯,这应该会提供不错的性能提升(因为它消除了许多依赖数据的分支?)

对于 8 个字节和 8 个 shorts 方法应该更简单,因为整个数组可以加载到单个 q 寄存器中。对于 arm64,使用 vmaxv_u16 应该更简单,但是如何使其在 32 位霓虹灯中高效?

正如 Marc 在评论中所指出的,当函数更改为返回最大值时,GCC 自动向量化器会为 neon64生成以下内容:

ldr q0, [x0, 16]
ld1r {v2.4s}, [x0]
ldr q1, [x0] …
Run Code Online (Sandbox Code Playgroud)

c++ arm intrinsics neon

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

检查是套接字阻塞(特定于Winsock)

可能重复:
在Win32中,有没有办法测试套接字是否是非阻塞的?

这就是我在windows中将套接字设置为非阻塞模式的方法.

unsigned long mode = is_blocking ? 0 : 1;
int ret = ::ioctlsocket(m_Socket, FIONBIO, &mode);


在我复杂的图书馆中,我偶尔会得到一个锁,因为传递给它的一些插座没有设置为非阻塞模式.所以,我想补充并断言能够看到非阻塞套接字是从通过.问题是,我不知道如何测试,如果插座阻止与否.



在unix上,它很简单:

long arg = 0;
if((arg = fcntl(m_Socket, F_GETFL, NULL)) < 0) { 
   return ERROR;
}
bool was_blocking = (arg & O_NONBLOCK) != 0;



那么,如何测试socket是否在Windows上阻塞.

谢谢

sockets winsock

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

CPU依赖代码:如何避免函数指针?

我有为多个CPU编写的性能关键代码.我在运行时检测CPU,并根据检测到的CPU使用适当的函数.所以,现在我必须使用函数指针并使用这些函数指针调用函数:

void do_something_neon(void);
void do_something_armv6(void);

void (*do_something)(void);

if(cpu == NEON) {
    do_something = do_something_neon;
}else{
    do_something = do_something_armv6;
}

//Use function pointer:
do_something(); 
...
Run Code Online (Sandbox Code Playgroud)

这并不重要,但我会提到我已经针对不同的cpu优化了功能:armv6和armv7以及NEON支持.问题是通过在许多地方使用函数指针,代码变得更慢,我想避免这个问题.

基本上,在加载时,链接器使用函数地址解析relocs和patch代码.有没有办法更好地控制这种行为?

就个人而言,我提出了两种避免函数指针的方法:为cpu依赖函数创建两个独立的.so(或.dll),将它们放在不同的文件夹中,并根据检测到的CPU将这些文件夹中的一个添加到搜索路径中(或者LD_LIB_PATH).加载主代码和动态链接器将从搜索路径中获取所需的dll.另一种方法是编译两个独立的库副本:)第一种方法的缺点是它迫使我至少有3个共享对象(dll):两个用于cpu依赖函数,一个用于使用它们的主代码.我需要3,因为在加载使用这些cpu相关函数的代码之前,我必须能够进行CPU检测.关于第一种方法的好处是应用程序不需要为多个CPU加载相同代码的多个副本,它将仅加载将使用的副本.第二种方法的缺点是非常明显的,不需要谈论它.

我想知道是否有办法在不使用共享对象的情况下执行此操作并在运行时手动加载它们.其中一种方法是涉及在运行时修补代码的一些hackery,它可能太复杂而无法正确完成它).有没有更好的方法来控制加载时的重定位?也许将cpu依赖函数放在不同的部分,然后以某种方式指定哪个部分具有优先级?我认为MAC的男子气概有类似的东西.

ELF-only(针对手臂目标)解决方案对我来说已经足够了,我并不真正关心PE(dll's).

谢谢

c cpu arm elf ld

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

在不同的android repo标签之间切换

我需要下载不同android标签的src代码.每次需要半小时和GIGS的空间.相反,我宁愿切换到不同的标签.我怎么能这样做?

cd android-4.0.4_r1.1
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.4_r1.1
repo sync


cd ../android-4.2.2_r1
repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1
repo sync
Run Code Online (Sandbox Code Playgroud)

从android-4.0.4_r1.1切换/更新到android-4.2.2_r1的正确方法是什么?

android repository

4
推荐指数
2
解决办法
4932
查看次数

FLS与TLS,我可以使用光纤本地存储代替TLS吗?

我的库中有用于win-threads和pthreads的可移植TLS(线程本地存储)代码,但是在WinRT上没有TlsXXX api.然而,有,供应几乎是相同的目的FlsXXX API作为的TLS API.来自MSDN:

光纤可以使用光纤本地存储(FLS)为每根光纤创建变量的唯一副本.如果没有发生光纤切换,FLS的行为与线程本地存储完全相同

那么,这是否意味着我可以简单地使用FlsXXX api作为替代品(我不使用光纤,我不使用__thread说明符用于变量,我直接使用api).

windows multithreading windows-runtime

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

CLang libc,Windows上的libc ++,带有与Visual Studio兼容的调试符号

我试图找到信息,我没有在clang网站上看到它.我正在考虑尝试在Windows上使用它,但我不知道它是否拥有它自己的libc或者它使用来自MS的破解libc?

另一个问题:如果我使用clang编译代码,我是否可以使用visual studio作为调试器,例如clang能够以MS格式发出调试符号(这是我不想使用gcc的原因;这是英特尔编译器可以做的事情,但它使用MS的libc).

简而言之,我希望能够使用visual studio作为调试器,但我同时需要具有正常lib c的正常实际编译器.

或者,也许还有商业选择.我读过dinkum为Win32和其他人出售商业libc,但我不知道价格是多少以及如何获得它.

libc llvm clang visual-studio

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

在函数作用域末尾执行代码的简单方法

在测试代​​码中,我偶尔想设置/模拟一些全局变量,在测试/范围结束时我想恢复这些变量。例如:

BOOST_AUTO_TEST_CASE(HttpClientCsrf)
{
    std::string csrfSave = Http::getCsrfToken();
    ... some test code
    Http::setCsrfToken(csrfSave); // restore csrf
}
Run Code Online (Sandbox Code Playgroud)

这里明显的问题是,如果some test code在到达结束之前返回(或抛出),您将不会恢复该csrfSave变量。因此,简单的改进是编写一些简单的结构包装器来自动恢复 dtor 中的值:

struct CsrfSave
{
    std::string csrfSave;
    CsrfSave()
    {
        csrfSave = Http::getCsrfToken();
    }
    ~CsrfSave()
    {
        Http::setCsrfToken(csrfSave);
    }
};
BOOST_AUTO_TEST_CASE(HttpClientCsrf)
{
    CsrfSave csrfSave;
    ... some test code
    // dtor of CsrfSave restores csrf
}
Run Code Online (Sandbox Code Playgroud)

这通常解决了问题,但是,对于每个函数,您都需要编写大量样板代码。所以,问题是:什么是最短和最简单的方法可以用来实现相同的目标,同时最小化并可能避免所有的样板文件。

我使用的一种这样的方法,我对此不太满意:

BOOST_AUTO_TEST_CASE(HttpClientCsrf)
{
    std::string csrfSave = RBX::Http::getLastCsrfToken();
    shared_ptr<void> csrfSaveScope(NULL, [&](void*) {
        RBX::Http::setLastCsrfToken(csrfSave);
    });
    ... some test code
}
Run Code Online (Sandbox Code Playgroud)

有更好的吗?我宁愿避免编写任何实用程序类,并且宁愿避免 boost (除非它包含在下一个 std 中)。这种模式经常发生在不同的项目(不共享代码)中,每次我最终编写使用 …

c++

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