<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
<!-- saved from url=(0013)about:internet -->
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style xmlns="" type="text/css">
    /* This style sets a margin around the entire page */
        html, body {
            margin: 10px;
        }

        p {
            font: normal 16px verdana, sans-serif;
            margin: 0;
            padding-bottom:12px;
        }

        h1 {
            font: bold 25px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h2 {
            font: bold 19px verdana, sans-serif;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0; 
            padding-bottom: 0;
        }

        h3 {
            font: bold 19px verdana, sans-serif !important;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        li {
            font: normal 16px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 18px;
            padding-top: 0;
            padding-bottom: 0;
        }

        .pdparam {
            font: italic 16px verdana, sans-serif;
        }
		
		.term {
			font: italic 16px verdana, sans-serif;
			font-weight: normal;
		}	
		
		.type {
			font: normal 16px verdana, sans-serif !important;
		}			
		
		.parameter { 
			font-style: italic; 
			}

        a:link, a:visited {
            color: blue;
            text-decoration: none;
            font: normal 16px;
        }

        a:hover {
            background-color: #FFFF99;
            font: normal 16px;
        }

        div.funcsynopsis {
            text-align: left;
            background-color: #e6e6e6;
            font: normal 16px verdana, sans-serif;
			padding-top: 10px;
			padding-bottom: 10px;
        }

        div.funcsynopsis table {
            border-collapse: separate;
            font: normal 16px verdana, sans-serif;
        }

        div.funcsynopsis td {
            background-color: #e6e6e6;
            border: 0 solid #000;
            padding: 1px;
            font: normal 16px verdana, sans-serif;
        }

        div.refsect1 {
            font-family: verdana, sans-serif;
            font-size: 16px;
        }

        code.constant {
            font: normal 16px courier new, monospace !important;
        }
		
		span.errorname {
            font: normal 16px verdana, sans-serif !important;
        }

        code.function {
            font: bold 16px verdana, sans-serif !important;
        }
		
        b.fsfunc {
            font: bold 16px verdana, sans-serif !important;
        }
		
        code.varname {
            font: italic 16px verdana, sans-serif;
        }

        code.replaceable {
            font: italic 16px courier new, monospace;
        }

        code.funcdef {
            font: normal 16px verdana, sans-serif !important;
        }

        .citerefentry {
            font: normal 16px verdana, sans-serif !important;
        }

        .parameter {
            font-style: italic;
        }

        code.fsfunc {
            font: normal 16px verdana, sans-serif !important;
        }

        /* PARAMETER: This style controls spacing between the terms in Parameter section */
        dt {
            margin-top: 15px;
        }

        /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */
        div.refsect1 table {
            width: 100%;
			margin-top: 10px;
            background-color: #FFF;
			border-collapse: collapse;
			border-color: #000;
            border-width: 1px;
			font: normal 16px verdana, sans-serif;
        }
		
        div.refsect1 th {
			border-collapse: collapse;
			border-color: #000;
            border-width: 1px;
            font: bold 16px verdana, sans-serif;
        }
		
        div.refsect1 td {
            background-color: #FFF;
            padding: 5px;
            vertical-align: text-top;
			border-collapse: collapse;
			border-color: #000;
            border-width: 1px;
            font: normal 16px verdana, sans-serif;
        }
		
		  div.refsect1 p{
            font: normal 16px verdana, sans-serif;
            margin-top: 8px;
            margin-bottom: 8px;
            padding-top: 0;
            padding-bottom: 0;
        }
		

        /* EXAMPLE: These styles apply only to the Example section */
        div.refsect2 {
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 table {
            margin-top: 0;
            background-color: #e6e6e6;
            width: 100%;
            border: 0 solid #000;
            padding: 2px;
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 td {
            background-color: #e6e6e6;
            font: normal 16px courier new, monospace !important;
			white-space:pre;
        }

        /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */
        div.refsect3 {
            font: normal 11px verdana, sans-serif;
            margin-top: 50px;
            margin-bottom: 20px;
            padding-top: 0;
            padding-bottom: 0;
        }
					
</style>
    <title>Attributes of Types</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" />
    <meta name="keywords" content="                            &#10;                Attributes of Types&#10;            " />
  </head>
  <body>
    <div class="refentry">
      <a id="idm1"></a>
      <div class="titlepage"></div>
      <div xmlns="" class="refnamediv">
        <a xmlns="http://www.w3.org/1999/xhtml" id="Attributes of Types"></a>
        <h1>Attributes of Types</h1>
        <p>
            Attributes of Types.
        </p>
      </div>
      <div class="refsect2">
        <a id="synopsis"></a>
        <h3>
        </h3>
        <div class="informaltable">
          <table class="informaltable" border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">
__attribute__ ((aligned))
__attribute__ ((aligned (<code class="varname">n</code>)))
__attribute__ ((packed))
                        </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="description"></a>
        <h2>Description</h2>
        <p>
The keyword <code class="constant">__attribute__</code> allows you
to specify special attributes of <code class="code">struct</code> and
<code class="code">union</code> types when you define such types.
This keyword is followed by an attribute
specification inside double parentheses. Two attributes
are currently defined for types: aligned,
and packed.
        </p>
        <p>
You may specify type attributes in an <code class="code">enum</code>,
<code class="code">struct</code> or <code class="code">union</code> type declaration or definition,
or for other types in a <code class="code">typedef</code> declaration.
        </p>
        <p>
For an <code class="code">enum</code>, <code class="code">struct</code> or
<code class="code">union</code> type, you may specify attributes
either between the <code class="code">enum</code>,
<code class="code">struct</code> or <code class="code">union</code> tag
and the name of the type, or just past the closing curly brace of the
<span class="emphasis"><em>definition</em></span>. The former syntax is preferred.
        </p>
      </div>
      <div class="refsect2">
        <a id="aligned"></a>
        <h3>aligned (<code class="varname">alignment</code>)</h3>
        <p>
The attribute <code class="constant">aligned (<span class="emphasis"><em>alignment</em></span>)</code> specifies a minimum alignment (in bytes) for variables of the specified type. For example, the declarations:
        </p>
        <p>
        </p>
        <div class="informaltable">
          <table class="informaltable" border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">    <code class="code">struct S { short f[3]; } __attribute__ ((aligned (8)));
    typedef int more_aligned_int __attribute__ ((aligned (8)));</code></td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>		
</p>
        <p>
force the compiler to ensure (as far as it can) that each variable whose type is
<code class="code">struct S</code> or <code class="code">more_aligned_int</code>
will be allocated and aligned <span class="emphasis"><em>at least</em></span> on a
8-byte boundary.
        </p>
        <p>
Note that the alignment of any given <code class="code">struct</code>
or <code class="code">union</code> type is required by the ISO C
standard to be at least a perfect multiple of the lowest common multiple of the alignments
of all of the members of the <code class="code">struct</code> or
<code class="code">union</code> in question and must also be a power of
two. This means that you <span class="emphasis"><em>can</em></span>
effectively adjust the alignment of a <code class="code">struct</code> or <code class="code">union</code>
type by attaching an aligned attribute to any one of the members of such a type, but the
notation illustrated in the example above is a more obvious, intuitive, and readable way to
request the compiler to adjust the alignment of an entire
<code class="code">struct</code> or <code class="code">union</code> type.
        </p>
        <p>
As in the preceding example, you can explicitly specify the alignment (in bytes) that you
wish the compiler to use for a given
<code class="code">struct</code> or <code class="code">union</code> type. Alternatively, you can
leave out the alignment factor and just ask the compiler to align a type to the maximum
useful alignment for the target machine you are compiling for. For example, you could
write:
        </p>
        <p>
		
		 </p>
        <div class="informaltable">
          <table class="informaltable" border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">    <code class="code">struct S { short f[3]; } __attribute__ ((aligned));</code></td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>	
</p>
        <p>
Whenever you leave out the alignment factor in an <code class="code">aligned</code>
attribute specification, the
compiler automatically sets the alignment for the type to the largest alignment which is
ever used for any data type on the target machine you are compiling for. In the example
above, the size of each <code class="code">short</code> is 2 bytes,
and therefore the size of the entire <code class="code">struct S</code>
type is 6 bytes. The smallest power of two which is greater than or equal to that is 8, so
the compiler sets the alignment for the entire <code class="code">struct S</code> type to 8 bytes.
        </p>
        <p>
Note that the effectiveness of aligned attributes may be limited by inherent limitations of
the OpenCL device and compiler. For some devices, the OpenCL compiler may only be
able to arrange for variables to be aligned up to a certain maximum alignment. If the
OpenCL compiler is only able to align variables up to a maximum of 8 byte alignment,
then specifying <code class="code">aligned(16)</code> in an <code class="code">__attribute__</code>
will still only provide you with
8 byte alignment. See your platform-specific documentation for further information.
        </p>
        <p>
The <code class="code">aligned</code> attribute can only increase the alignment;
but you can decrease it by
specifying <code class="code">packed</code> as well. See below.
        </p>
      </div>
      <div class="refsect2">
        <a id="packed"></a>
        <h3>packed</h3>
        <p>
The <code class="constant">packed</code> attribute, attached to the <code class="code">struct</code> or <code class="code">union</code>
type definition, specifies that each member of the structure or union is placed to minimize the memory required. When
attached to an <code class="code">enum</code> definition, it indicates that the smallest integral type should be used.
        </p>
        <p>
Specifying this attribute for <code class="code">struct</code> and
<code class="code">union</code> types is equivalent to specifying
the <code class="code">packed</code> attribute on each of the structure or union members.
        </p>
        <p>
In the following example <code class="code">struct my_packed_struct</code>'s members are
packed closely together, but the internal
layout of its <code class="code">s</code> member is not packed. To
do that, <code class="code">struct my_unpacked_struct</code> would need to be packed, too.
        </p>
        <p>		
		 </p>
        <div class="informaltable">
          <table class="informaltable" border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">    <code class="code">struct my_unpacked_struct
    {
        char c;
        int i;
    };

    struct __attribute__ ((packed)) my_packed_struct
    {
        char c;
        int i;
        struct my_unpacked_struct s;
    };</code></td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>			
</p>
        <p>
You may only specify this attribute on the definition of a
<code class="code">enum</code>, <code class="code">struct</code>, or
<code class="code">union</code>, not on a <code class="code">typedef</code>
which does not also define the enumerated type,
structure or union.
        </p>
      </div>
      <div class="refsect1">
        <a id="specification"></a>
        <h2>Specification</h2>
        <p>
            <img src="pdficon_small1.gif" />
                                                 
            <a href="http://www.khronos.org/registry/cl/specs/opencl-1.0.pdf#page=163" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="attribute.html"><span class="citerefentry"><span class="refentrytitle">__attribute__</span></span></a>, 
            <a class="citerefentry" href="attributes-blocksAndControlFlow.html"><span class="citerefentry"><span class="refentrytitle">Blocks and Control-Flow Statement Attributes Attributes</span></span></a>,  
            <a class="citerefentry" href="attributes-variables.html"><span class="citerefentry"><span class="refentrytitle">Variable Attributes</span></span></a>
        </p>
      </div>
      <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><img xmlns="http://www.w3.org/1999/xhtml" src="KhronosLogo.jpg" /><p xmlns="http://www.w3.org/1999/xhtml"></p>Copyright © 2007-2009 The Khronos Group Inc. 
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials. 
</div>
    </div>
  </body>
</html>
