小编Har*_*ald的帖子

如何对齐std :: array包含的数据?

既然std::array不允许更改其分配器,是否有办法确保指向数据地址的指针是对齐的?

例如,在GNU g ++ 4.8.4和6.1.0中,代码如下

#include <array>
#include <iostream>

int main(void)
{
  std::array<bool, 10> a;
  std::array<char, 10> b;
  std::array<int,10> c;
  std::array<long long, 10> d;
  std::array<float, 10> e;
  std::array<double, 10> f;

  std::cout << "array<bool,10>.data()       = " << a.data() << std::endl;
  std::cout << "array<char,10>.data()       = " << (void*) b.data() << std::endl;
  std::cout << "array<int,10>.data()        = " << c.data() << std::endl;
  std::cout << "array<long long, 10>.data() = " << d.data() << std::endl;
  std::cout << "array<float, 10>.data()     = " << e.data() << …
Run Code Online (Sandbox Code Playgroud)

c++ arrays std memory-alignment c++11

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

Android如何解释布局中的@null关键字?

我正在挖掘Android的来源,寻找系统如何识别布局中提到的@null关键字的答案.例如,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:background="@null"
          android:layout_width="match_parent"
          android:layout_height="match_parent"/>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我遵循这条路线:

  1. TypedArray#getDrawable(int index)
  2. ResourcesImpl#getValue(@AnyRes int id,TypedValue outValue,boolean resolveRefs)
  3. AssetManager #getResourceValue(@AnyRes int resId,int densityDpi,@ NonNull TypedValue outValue,boolean resolveRefs)
  4. AssetManager#loadResourceValue(int ident,short density,TypedValue outValue,boolean resolve)

我试图找到源代码 JNI实现的AssetManager loadResourceValue方法,但我还没有成功.

如果有人能指出Android如何解析@null标签,我将不胜感激.

提前致谢!

java android

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

如何检测是否存在/可以调用m4宏

我们正在开发一个使用autotools的软件包(准确地说是autoconf 2.69和automake 1.13.3).这个包需要wxwidgets,这个库提供了自己的m4文件,允许在最终安装系统中测试wxwidgets的安装.wxwidgets最近将版本从2.8更改为3.0,在此更改中,它们还更改了用于确定可用性的宏(即宏从AM_PATH_WXCONFIG更改为WX_CONFIG_CHECK)及其参数化.这也意味着如果我们从包中分发源代码并且外部开发人员想要重建configure,那么configure.ac文件应该知道应该使用哪两个.

所以问题是:我们的包有没有机会在执行之前检查m4宏是否存在?如果那是不可能的,那么我们应该将wxwidgets中的m4文件包含到我们的包中吗?

autoconf autotools m4

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

通过 JVMTI 识别异常

我正在使用 JVMTI 为 Java 应用程序编写检测工具。我已经看到 JVMTI 根据http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#Exception检测何时抛出异常以及何时捕获异常。本文档说明了事件 Exception 和 ExceptionCatch

异常字段标识抛出的异常对象。

虽然它没有说明如何在运行期间比较它们(即比较 Exception 中提供的异常对应于 ExceptionCatch 中捕获的 expcetion)。换句话说,对于

# java -version
java version "1.7.0_85"
OpenJDK Runtime Environment (IcedTea 2.6.1) (7u85-2.6.1-5ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.85-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)

直接比较 jexception/jobobject 时,它似乎并不总是正确的。考虑监控 Exception 和 ExceptionCatch 事件的 JVMTI 代理(下面的源代码),还考虑随后抛出异常的 Java naïve 示例(也包括源代码),最后您可以通过“make run”与代理一起运行该示例" 使用给定的 Makefile(包含在最后)。

如果我使用 OpenJDK 7 运行示例,它会给我以下结果:

# make run
...
cb_Exception (exception=0x2ae6b8087be8)
cb_ExceptionCatch (exception=0x2ae6b80859f8 vs last_exception=0x2ae6b8087be8)
AreSameObject? = 0
cb_Exception (exception=0x2ae6b80859f8)
cb_ExceptionCatch (exception=0x2ae6b807a388 vs last_exception=0x2ae6b80859f8)
AreSameObject? = 0 …
Run Code Online (Sandbox Code Playgroud)

java exception jvmti

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

如何在c ++中初始化结构中的向量

我在c ++中遇到了矢量问题.我是c ++的新手,所以请记住这一点.

所以我在我的程序开始时有以下结构:

typedef struct grupo
{
    float transX, transY, transZ, rotX, rotY, rotZ, rotAngle, scaleX, scaleY, scaleZ;
    char **modelos;
    struct grupo** grupos;
    int nNomes = 0, nGrupos=0;
    std::vector<float> vertices;
};

struct grupo *grupo;
Run Code Online (Sandbox Code Playgroud)

而我只是这样开始主要:

grupo = (struct grupo*)malloc(sizeof(struct grupo));
grupo->modelos = (char **)malloc(sizeof(1));
grupo->grupos = (struct grupo **)malloc(sizeof(struct grupo));
Run Code Online (Sandbox Code Playgroud)

在主要的中间我试图使用这个:

grupo->vertices.push_back(x);
Run Code Online (Sandbox Code Playgroud)

但它一直在破坏程序.我正在使用visual studio,并使用调试模式.我可以看到将X推送到崩溃的向量时(x有一个值).我试图将矢量更改为浮点数组.所以我能想象的问题是矢量的初始化......你能帮我解决一下我错过了什么吗?

谢谢 :)

c++ struct vector

5
推荐指数
2
解决办法
6954
查看次数

在运行时在本地启用/禁用OpenMP

是否可以在运行时启用或禁用OpenMP并行化?我有一些代码应该在某些情况下并行运行,而不是在不同情况下并行运行.同时,在其他线程中还有其他计算也使用OpenMP,并且应始终并行运行.有没有办法告诉OpenMP不要在当前线程中并行化?我知道omp_set_num_threads,但我认为全局设置OpenMP使用的线程数.

c c++ multithreading openmp

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

在运行时启用和禁用gprof?

我想知道是否有任何API gprof可以在运行时通过受监视的应用程序启用和禁用性能分析。我对禁用代码某些部分的概要分析并使之专注于我感兴趣的部分感兴趣。我的意思是,有办法避免这种情况吗?

int main (void)
{

  // disable gprof ?
  uninteresting_routine();
  // enable gprof ?

  interesting_routine();
}
Run Code Online (Sandbox Code Playgroud)

链接从GCC网站指仪器选项似乎并不包括这个功能的任何引用。

c performance gprof

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

是否可以识别地址引用是否属于进程地址空间中的静态/堆/堆栈

我们有一种机制可以监控捕获引用地址的加载和存储指令.我想对地址进行分类,无论它们属于堆栈,堆还是分配静态变量的区域.有没有办法以编程方式进行此分类?

我最初的想法是在进程开始运行时立即执行一个带有小内存请求(1?)的malloc(),这样我就可以捕获堆的"基地址"(或起始地址).这样,我可以区分静态分配的那些变量和其余的变量.对于那些不属于静态区域的引用(那些是堆和堆栈),我怎么能区分它们?

一些小测试显示以下简单代码(在Linux 3.18/x86-64中运行,使用gcc 4.8.4编译)

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

int x;

int foo (void)
{
    int s;
    int *h = malloc (sizeof(int));

    printf ("x = %p, *s = %p, h = %p\n", &x, &s, h);
}

int main (int argc, char *argv[])
{
    foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显示了地址空间的一些随机化(不是在静态变量中,而是在剩余部分 - 堆和堆栈中),这可能会增加一些不确定性,但可能是一种找到这些地区的限制的方法.

c heap-memory memory-address

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