如何直接从C++访问GPU和声卡芯片的功能?

How to access functionality of both GPU & SoundCard Chip directly from C++?

本文关键字:芯片 声卡 功能 GPU 何直接 C++ 访问      更新时间:2023-10-16

我是一名学习C++并发编程的学生。我想知道如何通过我的C++程序访问图形卡芯片和声卡芯片的功能。有没有其他方法可以在不使用OpenGL、OpenAL等外部库的情况下连接各自的驱动程序和我的应用程序。你能通过一个例子简要描述一下解决方案吗。非常感谢。

const int * const function_name(const int * point) const;
//(1)       (2)                 (3)                (4)

第一个防止返回的指针被用来修改函数正在访问的任何数据。这很好(除非您想修改它),因为它可以防止对共享数据的意外修改。

第二个阻止调用者修改返回的指针。这在返回内置类型(如指针)时没有影响,在返回类类型时可能会很糟糕,因为它禁止移动语义。

第三个阻止函数修改数据。这是好的(在适当的时候),原因与第一个相同。

第四个防止函数修改对象的(不可变的)状态。这很好(在适当的时候),因为它允许在const对象上调用函数,并使跟踪对象何时可能更改变得更容易。

const int * const Functiontwo(const int * const &) const;
//                                        (5)

这里唯一的新事物是通过const引用传递指针。这样做毫无意义;传递值提供了相同的语义,而且不那么冗长,可能更高效。对于较大或复制成本较高的类型,传递const引用可能比传递值更高效。

一个微小的变化是通过const值:

const int * const Functiontwo(const int * const) const;
//                                        (6)

调用方对此不感兴趣(事实上,函数可以在不改变含义的情况下声明,也可以不声明);因此,把它放在声明上是没有意义的,只放在中。这意味着指针不能在函数中更改。这可能很好(正如声明局部变量const一样),因为它可以使函数实现更容易遵循。

const在成员函数之后意味着该函数不会修改父对象的状态:

struct foo
{
    int bar() const; // does not modify the instance of foo
    int & bar(); // might modify the instance of foo
};

在您的示例中,您的函数返回

int const * const

第一个const表示,您所指向的int不得更改;你告诉你的用户,他可以读取值,但不能修改它。这也与const-正确性有关:

int const * foo() const; // can be used from const functions
int * foo(); // cannot be used from const function

第二个const表示指针本身是const,表示:

int * ptr = &a;
*ptr = 42; // valid
ptr = &b; // valid
int const * ptr = &a;
*ptr = 42; // INVALID
ptr = &b; // valid
int * ptr const = &a;
*ptr = 42; // valid
ptr = &b; // INVALID
int const * ptr const = &a;
*ptr = 42; // INVALID
ptr = &b; // INVALID

使指针本身const作为函数的返回值几乎没有任何用处。

对于引用,C++03的一个快速指南是,如果你想修改对象,你想通过引用传递,并希望修改保持不变;如果您想修改对象但不希望修改继续(复制),则通过值传递,或者如果您传递的值是POD类型,则通过(异常!)传递;如果您不需要修改非POD类型,则可以通过常量引用,从而节省复制成本:

void foo(int & a); // changes to a are applied to a itself, no copy made
void foo(int a); // changes to a are applied to a copy of a, copy made
void foo(std::string const & a); // no changes allowed, no copy made