小编sel*_*rer的帖子

如何将参数传递给AndroidTestCase?

我已经实现了Instrumentation和AndroidTestCase.

对于我的测试,我需要连接到外部WIFI设备.我希望测试人员能够为要使用的测试指定SSID.

给命令行(adb shell am instrument ...)运行测试不是问题,但是如何将SSID添加到命令行并在代码中提取它?

instrumentation android

6
推荐指数
2
解决办法
4762
查看次数

C++模板和标头分配

我最近遇到了在一个DLL(或*.so - 可移植代码)中进行内存分配和在另一个DLL中完成释放的问题.到目前为止我遇到的错误是:

  • 它只是不起作用 - 在调试时失败了assert().
  • 如果一个DLL与标准C库静态链接并且另一个DLL与其动态链接,则它不起作用.
  • 如果一个DLL执行分配然后卸载DLL并且另一个DLL尝试释放此内存,则它不起作用.

基本上我决定遵循的规则是不在一个DLL中进行分配并在另一个DLL中释放(最好将其保存在一个cpp文件中).这通常也意味着我不应该在可能由多个DLL共享的头文件中进行分配.这意味着我不应该在tempaltes中进行分配(因为它们都在标题中),这是一个非常大的限制.

当我确实需要在模板中创建一个新对象时,我现在所做的就是为它分配一个cpp文件的内存,然后只使用placement new运算符运行它的c'tor.

// header
class MyBase
{
public:
  static void* allocate(std::size_t i_size);
};

template <typename T>
class MyClass: MyBase
{
public:
  T* createT();
};

temlpate <typename T>
T* MyClass<T>::createT()
{
  void* pMem = MyBase::allocate( sizeof(T) );
  return new (pMem) T;
}

// Cpp file
void* MyBase::allocate(std::size_t i_size)
{
  return malloc( i_size );
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但这有点难看.这意味着不使用new就编写模板代码.

另一个含义是,如果你不知道使用这种技术编写模板,你应该只在头文件中使用它的const方法(包括其他模板)(这假设const方法不分配或释放内存).这包括STL.实际上,我遇到的一个地方是在一个向量中,该向量由一个动态库(在HP-UX上)调整大小,然后卸载,而不是由另一个动态库调用它.

是否有一些广为人知的解决方案,我只是缺少或只是一个被忽视的问题?

c++ memory templates allocation

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

Linux 上的 RTLD_LOCAL 和 dynamic_cast

我们有一个插件,它由应用程序中的一些共享库构成,我们需要在应用程序运行时更新这些库。出于性能原因,我们在卸载旧插件之前加载并开始使用新插件,并且只有当所有线程都使用旧插件完成时,我们才卸载它。由于新插件和旧插件的库中有相同的符号,我们dlopen()使用RTLD_LOCAL. 如果我们不意外地从内部函数调用新插件到旧插件中的符号。

插件的一个库对由插件dynamic_cast()的另一个库创建的对象执行操作。这适用于 HP-UX、AIX、Solaris 和 Windows,但不适用于 Linux。据我所知,这是因为所有这些操作系统(编译器)都使用类的名称来比较类型(在 中dynamic_cast()),但 Linux 使用名称字符串地址来进行这种比较(以提高性能)并且因为每个库都有自己的type_info对象(因为它是用 加载的RTLD_LOCAL)地址不同,因此相同的类型似乎不等于dynamic_cast().

有没有办法执行以下操作之一:

  • type_info加载对象,就像RTLD_GLOBAL提供的一样。
  • 使编译器使用类名比较而不是type_info地址来比较类型。

? 我们使用的编译器是:

$ icpc -V
Intel(R) C++ Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0.0.084 Build 20101006
Copyright (C) 1985-2010 Intel Corporation.  All rights reserved.
Run Code Online (Sandbox Code Playgroud)

c++ linux dlopen

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

IP头位顺序不清楚

我读了IP RFC,并在那里说IP头的4个第一位是版本.在图中,它还显示位0到3是版本.

http://tools.ietf.org/html/rfc791#section-3.1

但是当我查看标头的第一个字节时(使用pcap lib捕获),我看到这个字节:

0×45

这是版本4 IP头,但显然位4到7等于4而不是我预期的位0到3.

我期望按位进行第一个字节,0x0F会得到我的版本,但似乎我需要和0xF0.

我错过了什么吗?理解错误的东西?

c c++ ip pcap

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

标签 统计

c++ ×3

allocation ×1

android ×1

c ×1

dlopen ×1

instrumentation ×1

ip ×1

linux ×1

memory ×1

pcap ×1

templates ×1